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

js 2つのAJax非同期操作の後に新しい操作を実行する最良の方法

今日、インタビューで質問がありました。ページ上に 2 つの非同期 ajax 操作がある場合、2 つの非同期操作の実行順序が不明なため、両方の操作が実行された後に新しい操作を実行するにはどうすればよいですか?最善のアプローチは?

そのとき私は方法 1 に答えました。2 つの ajax をネストし、2 番目の ajax の return 関数で新しい操作を実行します。インタビュアーの答え: この方法はあまりにも大雑把です。

そこで私は 2 番目の答えを考えました。タイマー setTimeout を通じてローカル変数を監視し、新しい操作を実行する前に 2 つの非同期操作が完了していることを確認します。インタビュアーの答え: この方法のパフォーマンスは良くありません。もっと簡単で合理的な方法を考えられますか?

当時の考えは失敗に終わりました
そこで、何が最善の方法なのかを知るためにこの質問を立てました。議論やアドバイスを歓迎します

世界只因有你世界只因有你2663日前1629

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

  • 学习ing

    学习ing2017-07-05 10:56:02

    1. Promise は非同期 Ajax 操作をラップします。
    2. async 関数を定義します。
    3. Promise データの非同期取得が完了するまで待機するこの方法は、特に私が作成したサンプル コードを参照してください。 ajax がデータを取得した後、settimeout 関数を使用してデータの取得をシミュレートします。この関数は非同期であり、同じ原理と効果があります。
    リーリー

    返事
    0
  • 漂亮男人

    漂亮男人2017-07-05 10:56:02

    http://api.jquery.com/jQuery....

    返事
    0
  • 为情所困

    为情所困2017-07-05 10:56:02

    ブラウザ環境で現在すぐに使用できるネイティブ メソッドは Promise.all です。

    このページでマップをロードするには、複数のリクエストを同時に開始する必要がありますが、返される順序は保証されません。

    1. 中国の地形データ

    2. 各州のJSONデータ

    3. 複数のグラフがオーバーレイされる場合、複数のグラフに複数の JSON データがあり、異なるデータ インターフェイスを通じて返す必要があります...

    ソリューションはパッケージ化されていない

    に直接あります。例: http://sinomap.ewind.us/demo/demo.js リーリー

    このように、Promise はコールバック ロジックの分離を実現するだけでなく、基本的な非同期プロセス制御も実現します。

    返事
    0
  • 高洛峰

    高洛峰2017-07-05 10:56:02

    jquery の when メソッドを見たので、jquery ほど優れたものではないかもしれませんが、少なくとも次のコードをコンソールに直接入力して試してみます。行って書いてください 30分かかりました。 。

    リーリー

    返事
    0
  • 给我你的怀抱

    给我你的怀抱2017-07-05 10:56:02

    jQ を使用できるかどうかを尋ねます。使用できる場合は、次のように言ってください。 リーリー


    ちなみに、$.whenのドキュメントリファレンスはこちらです

    返事
    0
  • 为情所困

    为情所困2017-07-05 10:56:02

    プロミスのやり方だと思います

    返事
    0
  • 学习ing

    学习ing2017-07-05 10:56:02

    あなたの質問は、a、b、cの3つがあるということです。 c は、a と b が完了した後に実行する必要があります。

    おっしゃるような巣作り手法や暴力的な監視手法など、様々な手法があります

    私は以前にこの質問について考えたことがあり、これが私の答えです。

    非同期エミッター

    配列ストレージを使用して非同期操作を実行する方法

    すべての内部の関数には、値を返すために使用される関数であるパラメーター commit があることに注意してください。 ajax が成功したら、戻り値を返すだけです

    リーリー

    ランチャーを書く

    プロセッサは todo のようなデータです。 cb は最後のコールバックです。

    リーリー

    同時実行

    非同期エミッターを実行して最终回调

    を提供する リーリー

    リンク

    https://eczn.coding.me/blog/%...

    返事
    0
  • 世界只因有你

    世界只因有你2017-07-05 10:56:02

    変数 a=0 を定義し、ajax リクエストが成功した後のコールバックに a++ を設定できます。
    その後、両方のコールバックで a==2 を判断し、操作関数を実行します

    返事
    0
  • 天蓬老师

    天蓬老师2017-07-05 10:56:02

    2 つのフラグを設定し、2 つの ajax が同じコールバックを呼び出します。このコールバックでは、後続の操作が実行される前に両方のフラグが true であると判断されます。

    返事
    0
  • 漂亮男人

    漂亮男人2017-07-05 10:56:02

    別のajaxでajaxを記述し、コールバックで実行します

    返事
    0
  • キャンセル返事