検索

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

javascript - 同期方法で非同期に書くとはどういう意味ですか?

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

天蓬老师天蓬老师2727日前1132

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

  • 扔个三星炸死你

    扔个三星炸死你2017-07-05 10:54:36

    非同期呼び出しは現在のスレッドに対して非ブロックであるため、非同期処理が完了したかどうか、またはエラーが発生したかどうかを知りたい場合は、通常、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
  • PHP中文网

    PHP中文网2017-07-05 10:54:36

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

    リーリー

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

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

    リーリー

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

    返事
    0
  • 我想大声告诉你

    我想大声告诉你2017-07-05 10:54:36

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

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

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-07-05 10:54:36

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

    返事
    0
  • キャンセル返事