这似乎太奇怪了。
我有以下
$.when.apply(null, arrayOfDeferredObjects).then(function(result)) {
if (1 == arrayOfDeferredObjects.length){
//stuff done here
}
else{
for (var index = 0; index < contentUnits.length; index++) {
if(arguments && arguments[index][0] && arguments[index][0].response) {
//stuff done here
}
};
}
我的期望是参数将是一个1对象的数组,用于Deferreds数组中的1个调用,以及一个X对象数组,用于延迟数组中的X调用。
我知道为什么会发生这种情况,但是对于我检查数组的长度感到很沮丧。当只有一个对象且超过1时,参数不是数组。这是显而易见的。有什么办法可以让返回的参数不仅代表第一次调用吗?
答案 0 :(得分:1)
这样的参数总是反映立即函数的上下文,而不会引用外部上下文。您还使用了对原始数组的引用,该引用不会根据此代码进行更改。
您的原始数组和Arguments对象不是同一个东西,它们只是与成员具有相同的对象引用。参数永远不是一个数组,并且始终具有长度属性(基于您的语句,我认为您正在对参数做出一些错误的假设)。
then函数参数中的参数将根据调用时的延迟类型和数量而有所不同。请参阅规范。
最后,由于未显示迭代的ContentUnits变量,因此我无法为您发布工作代码。
我认为有更好的方法来做你想做的事情,只有你没有真正说出你想要做的事情。
我觉得有一个