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