1

这似乎太奇怪了。

我有以下

$.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 个调用的 1 个对象的数组,以及延迟数组中 X 调用的 X 对象数组。

我知道为什么会这样,但是检查数组的长度让我很沮丧。当只有 1 个对象并且有超过 1 个对象时,参数不是数组。这很明显。我可以做些什么来使返回的参数不仅仅代表第一次调用吗?

4

1 回答 1

1

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

您的原始数组和 Arguments 对象不是一回事,它们只是具有与成员相同的对象引用。Arguments 永远不是数组,并且始终具有长度属性(根据您的陈述,我认为您对参数做出了一些错误的假设)。

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

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

我认为有更好的方法来做你想做的事情,只是你实际上并没有说出你想做的事情。我认为有一个由

于 2011-12-20T01:53:09.647 回答