ホームページ  >  に質問  >  本文

非同期関数は値ではなく Promise を返します

async/await が Promise でどのように機能するかを理解しようとしています。

リーリー

私が理解しているところによると、 await はブロックしているはずであり、上記のコードでは、オブジェクト bl を返すためにプリミティブ timestamp を使用することを妨げているようです。その後、関数は元の値を返しますが、時間変数は元の値ではなく保留中の Promise に設定されます。私は何を取りこぼしたか?

P粉464208937P粉464208937387日前520

全員に返信(2)返信します

  • P粉099985373

    P粉0999853732023-10-20 14:57:49

    非同期プレフィックスは Promise のラッパーです。

    リーリー

    同じく

    リーリー

    返事
    0
  • P粉002023326

    P粉0020233262023-10-20 12:58:06

    async 関数は常に Promise を返します。これは、非同期作業の完了を報告する方法です。別の async 関数内で使用している場合は、await を使用してその Promise が解決されるのを待つことができますが、非 async 関数内で (通常は最上位レベルまたはイベント ハンドラー内で)、Promise を直接使用する必要があります。例:

    リーリー

    ...ただし、これを JavaScript モジュールのトップレベルで実行すると、すべての最新の環境で モジュールのトップレベル await がサポートされるようになります。 リーリー

    (この Promise が拒否された場合、モジュールのロードは失敗することに注意してください。Promise が失敗してもモジュールが意味を持って動作する場合は、必ず

    try/catch プロミスの拒否を処理します。)


    それは

    明示的な Promise コールバック条件の形式で何かを明らかにする (またはしないかもしれない) ことによって、JavaScript エンジンが async 関数をどのように処理するかについてのアイデアを与えてくれます。フード: リーリー 重要な注意事項:

    new Promise
      に渡す関数 (
    • promise executor 関数) は、new Promise によって同期的に呼び出されます。 これが操作を開始する理由であり、web3.eth.getBlock
        を同期的に呼び出して作業を開始します。
      • Promise executor でスローされたエラー (など) は、
      new Promise
    • によって捕捉され、Promise の拒否に変換されます。
    • Promise コールバックでスローされたエラー (渡す then
    • エラーなど) は捕捉され、拒否に変換されます。
    • 返事
      0
  • キャンセル返事