2016-05-23 8 views
-1

この正確な性質の質問がいくつかあります。そのうちの1つは無回答でした。そのうちの1つは、私が成功しようとしていることを正確に示唆していました。ここで複数のAjaxコールバックがいつ完了したかを判断する方法

は私がやりたいと思っていますものです:

関数A()多数回に1と呼ばれます。 関数b()は、非同期呼び出しを実行します。

for (i=0; i<=something; i++) { 
     function a() { 
      function b(); //makes async call 
     } 
    } 

// at this point, execution continues, 
// even though all function b()'s async 
// calls are still "pending". 

関数b()の非同期呼び出しのために、関数a()はすべて実用的な目的のために非同期でもあります。

すべての関数b()の非同期呼び出しが完了した時点を知る方法が必要です。

私はこれを試してみました:

var callCount=0; 

for (i=0; i<=something; i++) { 
    function a() { 
     callCount++; 
     function b(callCount); 
    } 
} 

私は、関数b()の非同期コールバック関数の減少callCountを持っており、これを実行します。

var callCount=0; 

for (i=0; i<=something; i++) { 
    function a() { 
     callCount++; 
     function b(callCount); // b()'s callback decrements callCount by 1; 
    } 
} 

while (callCount > 0) { 
} 

// now continue 

しかし(のための終了時に)ループでは、callCountには依然として呼び出し回数が含まれており、デクリメントしないため、無限ループが発生します。

callCountはb()のコールバック関数内で不変ですか?

複数の非同期呼び出しがすべて完了したときに検出する方法はありますか?私はjquery .ajax()と.get()の両方を使用しています。約束や繰延導入後

+1

[promises](http://www.html5rocks.com/en/tutorials/es6/promises/)と[deferred Object](https://api.jquery.com/category/deferred)をよくお読みください。 -object) – AldoRomo88

+0

@ AldoRomo88。うわー!私はちょうどすぐにもう一度両方を与え、私は完全に今、男になっている!特にdeferredObjectは、jQueryに入っているので、古いブラウザーにはpolyfillがあります!約束はどうですか?現時点ではこれらのブラウザのサポートは何を表していますか?方向性に感謝します。単に私がしようとしていることをする方法がないなら、間違いなく助けになるでしょう。 –

+1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promiseの末尾にあるブラウザの互換性の表を参照してください – Barmar

答えて

1

...あなたが必要とするすべては、このworking fiddle、ちょうどあなたのコンソールを開き、SEください約束の配列を維持し、$ .whenを使用して

$.when.apply($, promises).then(function() { 
    console.log('All ajax calls completed'); 
}); 

を適用することです。

+0

この配列を関数b()に入れると、呼び出し間でどのようにそれを保持するのですか?関数a()に入れると、b()関数でどのように利用できるようになりますか? @ AldoRomo88。 –

+0

私は閉鎖を理解する必要があると思っています。この記事を読んでください。 http://www.w3schools.com/js/js_function_closures.asp https://developer.mozilla.org/en-US/docs/ウェブ/ JavaScript /クロージャ http://javascriptissexy.com/understand-javascript-closures-with-ease/ – AldoRomo88

関連する問題