延迟数组 - 数组结果访问问题

时间:2011-12-20 00:58:19

标签: jquery jquery-deferred

这似乎太奇怪了。

我有以下

$.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时,参数不是数组。这是显而易见的。有什么办法可以让返回的参数不仅代表第一次调用吗?

1 个答案:

答案 0 :(得分:1)

这样的参数总是反映立即函数的上下文,而不会引用外部上下文。您还使用了对原始数组的引用,该引用不会根据此代码进行更改。

您的原始数组和Arguments对象不是同一个东西,它们只是与成员具有相同的对象引用。参数永远不是一个数组,并且始终具有长度属性(基于您的语句,我认为您正在对参数做出一些错误的假设)。

then函数参数中的参数将根据调用时的延迟类型和数量而有所不同。请参阅规范。

最后,由于未显示迭代的ContentUnits变量,因此我无法为您发布工作代码。

我认为有更好的方法来做你想做的事情,只有你没有真正说出你想要做的事情。

我觉得有一个