OTPベース認証用のカスタムログインハンドラを登録しています。上記のコードhandelLogin(loginRequest)
でMeteor.jsの内部で非同期コードを処理する方法Accounts.registerLoginHandler
Accounts.registerLoginHandler(async function(loginRequest){
if (!loginRequest.sms) return;
let user = await handelLogin(loginRequest);
console.log(user);
return user;
});
非同期関数であり、ネットワーク要求を行うとOTPコードを検証した後{userId:'.....'}
を返します。 は、クライアントからこのログインハンドラーと呼ばれるとき、私はいくつかは、私が値を持っているし、それを返すためにuser
変数を待つ必要が見つかっグーグルで、このエラー
Exception while invoking method 'login' Error: A login method must specify a userId or an error
を取得していますので、私は上記のコードでasync
とawait
を使用しました。 しかし、まだ同じエラーが発生しています。
この「ログイン」エラーの後、このコードからのconsole.log(user);
はしばらくしてからサーバーコンソールに記録されます。
- なぜ返りません
user
? - これを達成するための提案や方法があります。
彼はloginメソッドは、userIdを、またはエラー –
待ちを指定する必要がありますを示しています。 Meteorではいつasync/awaitを使用できますか? Ooy –
ねえ、しかし、私のhandelLogin(loginRequest)は非同期なので、Accounts.registerLoginHandlerのコールバックは、ユーザ変数がある値かエラーを持つのを待ってからそれを返す必要があります。しかし、私はそれがログインエラーを引き起こしている未定義を返すと思います。そこで、非同期コードが完了するのを待つ良い方法はありますか? –