実行しようとしている関数が 3 つあります。最初の 2 つは、3 番目の関数を使用するためにデータが必要な非同期処理を実行しています。1 と 2 の両方が完了したときにのみ、3 番目の関数を起動したいと考えています。これは一般的な構造ですが、最後の関数は 1 と 2 が終了する前に発火しています。
function run() {
var data1 = {};
var data2 = {};
$.when(first(), second()).done(constructData());
function first() {
var d = new $.Deferred();
//do a bunch of stuff async
data1 = {};
d.resolve();
}
function second() {
var d = new $.Deferred();
//do a bunch of stuff async
data2 = {};
d.resolve();
}
function constructData() {
//do stuff with data1 and data2
}
}
答えは、構造データをすぐに呼び出さないことでした
$.when(first(), second()).done(constructData);