$ .when.apply($,someArray)有什么作用?
我正在阅读关于递延和承诺的文章,并不断遇到$.when.apply($,someArray)
。我不清楚这到底是做什么的,正在寻找一种解释,指出哪一 可以正常工作(而不是整个代码片段)。这里是一些上下文:
var data = [1,2,3,4]; // the ids coming back from serviceAvar processItemsDeferred = [];
for(var i = 0; i < data.length; i++){
processItemsDeferred.push(processItem(data[i]));
}
$.when.apply($, processItemsDeferred).then(everythingDone);
function processItem(data) {
var dfd = $.Deferred();
console.log('called processItem');
//in the real world, this would probably make an AJAX call.
setTimeout(function() { dfd.resolve() }, 2000);
return dfd.promise();
}
function everythingDone(){
console.log('processed all items');
}
回答:
.apply
用于调用带有参数数组的函数。它接受数组中的每个元素,并将每个元素用作函数的参数。
.apply
也可以this
在函数内部更改context()。
因此,让我们来$.when
。过去常说“当所有这些诺言都得到解决时……采取行动”。它需要无限(可变)数量的参数。
就您而言,您有各种各样的承诺;您不知道要传递给多少参数$.when
。将数组本身传递给$.when
是行不通的,因为它期望参数是promise,而不是数组。
那就是.apply
进入的地方。它接收数组,并$.when
以每个元素作为参数进行调用(并确保将this
其设置为jQuery
/
$
),然后一切正常:-)
以上是 $ .when.apply($,someArray)有什么作用? 的全部内容, 来源链接: utcz.com/qa/408230.html