2

複数の遅延オブジェクトが完了するのを待機している場合、次の理由は次のとおりです。

$.when(tasks).then(function() {
    document.write("Completed all requests." + "<br/>");
});

すぐに実行しますが、

$.when.apply(null, tasks).then(function () {
    document.write("Completed all requests." + "<br/>");
});

タスクが完了するまで待機します。

4

1 に答える 1

12

関数は deferredのwhen配列を取りません。むしろ、それぞれの遅延オブジェクトを個別の引数として渡します。それはまさにあなたのapplyためにしていることです。

nullに渡されるのapplyは、それがapply期待されているからです。最初の引数は、呼び出されたときに関数のコンテキストが設定されるべきものであり、2 番目の引数は常に配列であり、関数が次のように呼び出されるように展開されます。配列内のすべての項目が個別の引数として渡された場合。

その目的のために、whenそれが呼び出されているコンテキストに違いはなく、他のものとnull同じように機能します。私はそれをjQuery自体に渡すことを好みます:

$.when.apply($, tasks).then(function () {
    // Whatever
});

きれいに見えると思うので、それは私だけです。それは何の違いもありません。


お使いのブラウザーがネイティブの promise をサポートしている (またはpolyfillを使用している) 場合は、代わりにそのallメソッドを使用できます。このメソッドは、promise の配列を直接受け取ります。

Promise.all(tasks).then(function (values) {
    // "values" is an array, with the results of each of the "tasks"
});
于 2013-01-29T01:47:10.203 に答える