同期はただの同期ではなく、非同期はただの非同期ではないでしょうか?同期的な方法で非同期的に書き込むとはどういう意味ですか?
扔个三星炸死你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 を理解する
PHP中文网2017-07-05 10:54:36
非同期の場合、次の形式でコールバック関数をネストするのが一般的です。
リーリーこの時点で、コールバックのネストが表示されますが、これは層ごとにネストする必要があり、非常にエラーが発生しやすく、保守が困難です。
同期モードでの非同期書き込みは次のようになります:
リーリー現時点では、非同期ビジネス ロジックは通常の同期を通じて実装されます。
我想大声告诉你2017-07-05 10:54:36
同期的な方法で非同期的に書くことは、コードの編成形式を指します。 async/await を使用すると、同期的な方法で非同期に書き込むことができます。次のコードを参照してください。 リーリー
; async/await を使用した後も、コードは同期的に見えますが、内部では最初に非同期操作 f が実行され、次に tf
是一个异步操作,如果不使用async/await,直接同步的方式打印t,结果肯定是undefined
が出力されます。