ホームページ > ウェブフロントエンド > jsチュートリアル > Async 関数が期待値ではなく `Promise { }` を返すのはなぜですか?

Async 関数が期待値ではなく `Promise { }` を返すのはなぜですか?

Linda Hamilton
リリース: 2024-12-09 22:03:12
オリジナル
899 人が閲覧しました

Why Does My Async Function Return `Promise {  }` Instead of the Expected Value?

非同期関数が Promise { を返すのはなぜですか?値の代わりに?

問題:

提供されたコード内:

let AuthUser = data => {
  return google.login(data.username, data.password).then(token => { return token } )
}
ログイン後にコピー

次の実行時:

let userToken = AuthUser(data)
console.log(userToken)
ログイン後にコピー

出力説明:

Promise { <pending> }
ログイン後にコピー

JavaScript の Promise は、非同期操作を表すために使用されます。非同期関数がまだ解決されていない Promise を返す場合、出力時に「保留中」としてログに記録されます。非同期呼び出しの結果をキャプチャするには、Promise で .then メソッドを使用する必要があります。このメソッドは引数としてコールバック関数を受け取り、Promise が解決されたときに実行されます。

解決策:

非同期関数からのトークンを正しく記録するには、次のようにします。コードを次のように変更します。

.then を使用すると、Promise の結果を次のように処理できます。解決されたか、まだ保留中です。

let AuthUser = function(data) {
  return google.login(data.username, data.password).then(token => { return token } )
}

let userToken = AuthUser(data)
console.log(userToken) // Promise { <pending> }

userToken.then(function(result) {
   console.log(result) // "Some User token"
})
ログイン後にコピー
詳細:

一度だけ解決することを約束し、解決された値は .then メソッドまたは .catch メソッドに渡されます。 Promises/A 仕様では、.then ハンドラー内の関数が値を返す場合、Promise はその値で解決されると規定されています。ハンドラーが別の Promise を返した場合、元の Promise は連鎖された Promise の解決された値で解決されます。

以上がAsync 関数が期待値ではなく `Promise { }` を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート