javascript - 同期方法で非同期に書くとはどういう意味ですか?
天蓬老师
天蓬老师 2017-07-05 10:52:36
0
4
1045

同期はただの同期ではなく、非同期はただの非同期ではないでしょうか?同期的な方法で非同期的に書き込むとはどういう意味ですか?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全員に返信 (4)
扔个三星炸死你

非同期呼び出しは現在のスレッドに対して非ブロックであるため、非同期処理が完了したかどうか、またはエラーが発生したかどうかを知りたい場合は、通常、Node.js で一般的なイベントまたはコールバックを通じて実現されます。 Ajax は非常に典型的な非同期呼び出しであり、jQuery.ajax を例に挙げます

リーリー

jQuery の Ajax は jQuery の Promise オブジェクトを返します。通常、done()回调来处理调用完成之后的事情。但实际它也有标准 Promise 的then(),所以上面的done是可以改成then的,但是要注意,done是以事件的形式注册回调,它返回当前这个 Promise 对象本身,可以链式调用注册若干个回调。而thenを使用して別の Promise オブジェクトを返します (標準の Promise 仕様)。呼び出しが連鎖している場合、各呼び出しは同じ Promise オブジェクトに対して作用しません。

コールバックで別の非同期呼び出しを行う必要がある場合は、コールバックに別のコールバックを登録する必要があります。たとえば、特定のデータを取得するには、まず api1 から特定の値を取得し、次にこの値を使用して api2 から特定のリソースを取得し、次にこのリソースの特定の値を使用して api3 からこの値を取得する必要があります。書くと次のようになります:

リーリー

これはまだ 3 番目のレベルです...非常に恐ろしいフォームです。この形態を「コールバック地獄」と呼びます。

この問題を解決するために、誰もがさまざまな方法を考えてきました。Promise もその 1 つですが、Promise はまだこの形式を完全に取り除くことができません。 co ライブラリも解決策の 1 つですが、完全に排除することはできません。

ただし、ES2017ではasync/awaitが導入され、いわゆる同期形式での非同期書き込みが可能になりました。例えば、上記のコードは

のように書き換えることができます。 リーリー

async/await はコールバックを排除するため、非同期 (つまり同期) コードを作成するのと同じように見えます。

参考:

  • 非同期呼び出しの「フラット化」について話します

  • 地獄から天国へ、ノードのコールバックが async/await に変更されます

  • JavaScript の async/await を理解する

いいねを押す+0
    Ty80

    非同期の場合、次の形式でコールバック関数をネストするのが一般的です。

    リーリー

    この時点で、コールバックのネストが表示されますが、これは層ごとにネストする必要があり、非常にエラーが発生しやすく、保守が困難です。

    同期モードでの非同期書き込みは次のようになります:

    リーリー

    現時点では、非同期ビジネス ロジックは通常の同期を通じて実装されます。

    いいねを押す+0
      我想大声告诉你

      同期的な方法で非同期的に書くことは、コードの編成形式を指します。 async/await を使用すると、同期的な方法で非同期に書き込むことができます。次のコードを参照してください。 リーリー

      ; async/await を使用した後も、コードは同期的に見えますが、内部では最初に非同期操作 f が実行され、次に tf是一个异步操作,如果不使用async/await,直接同步的方式打印t,结果肯定是undefinedが出力されます。

      いいねを押す+0
        伊谢尔伦

        上記の 2 つの答えで十分です

        いいねを押す+0
          最新のダウンロード
          詳細>
          ウェブエフェクト
          公式サイト
          サイト素材
          フロントエンドテンプレート
          私たちについて 免責事項 Sitemap
          PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!