今日、インタビューで質問がありました。ページ上に 2 つの非同期 ajax 操作がある場合、2 つの非同期操作の実行順序が不明なため、両方の操作が実行された後に新しい操作を実行するにはどうすればよいですか?最善のアプローチは?
そのとき私は方法 1 に答えました。2 つの ajax をネストし、2 番目の ajax の return 関数で新しい操作を実行します。インタビュアーの答え: この方法はあまりにも大雑把です。
そこで私は 2 番目の答えを考えました。タイマー setTimeout を通じてローカル変数を監視し、新しい操作を実行する前に 2 つの非同期操作が完了していることを確認します。インタビュアーの答え: この方法のパフォーマンスは良くありません。もっと簡単で合理的な方法を考えられますか?
当時の考えは失敗に終わりました
そこで、何が最善の方法なのかを知るためにこの質問を立てました。議論やアドバイスを歓迎します
1. Promise は非同期 Ajax 操作をラップします。
2. async 関数を定義します。
3. Promise データの非同期取得が完了するまで待機するこの方法は、特に私が作成したサンプル コードを参照してください。 ajax がデータを取得した後、settimeout 関数を使用してデータの取得をシミュレートします。この関数は非同期であり、同じ原理と効果があります。
リーリー
http://api.jquery.com/jQuery....
ブラウザ環境で現在すぐに使用できるネイティブ メソッドは Promise.all です。
このページでマップをロードするには、複数のリクエストを同時に開始する必要がありますが、返される順序は保証されません。
に直接あります。例:
このように、Promise はコールバック ロジックの分離を実現するだけでなく、基本的な非同期プロセス制御も実現します。http://sinomap.ewind.us/demo/demo.js
リーリーjquery の when メソッドを見たので、jquery ほど優れたものではないかもしれませんが、少なくとも次のコードをコンソールに直接入力して試してみます。行って書いてください 30分かかりました。 。
リーリーjQ を使用できるかどうかを尋ねます。使用できる場合は、次のように言ってください。 リーリー
ちなみに、$.whenのドキュメントリファレンスはこちらです
プロミスのやり方だと思います
あなたの質問は、a、b、cの3つがあるということです。 c は、a と b が完了した後に実行する必要があります。
おっしゃるような巣作り手法や暴力的な監視手法など、様々な手法があります
私は以前にこの質問について考えたことがあり、これが私の答えです。
非同期エミッター
配列ストレージを使用して非同期操作を実行する方法
すべての内部の関数には、値を返すために使用される関数であるパラメーター commit があることに注意してください。 ajax が成功したら、戻り値を返すだけです
リーリーランチャーを書く
プロセッサは todo のようなデータです。 cb は最後のコールバックです。
リーリー同時実行
非同期エミッターを実行して
を提供する リーリー最终回调
リンク
https://eczn.coding.me/blog/%...
変数 a=0 を定義し、ajax リクエストが成功した後のコールバックに a++ を設定できます。
その後、両方のコールバックで a==2 を判断し、操作関数を実行します
2 つのフラグを設定し、2 つの ajax が同じコールバックを呼び出します。このコールバックでは、後続の操作が実行される前に両方のフラグが true であると判断されます。
別のajaxでajaxを記述し、コールバックで実行します