Array of Deferreds - проблема с доступом к результату Array - PullRequest
1 голос
/ 20 декабря 2011

Это кажется очень странным.

У меня есть следующее

$.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 вызова в массиве Deferreds имассив X объектов для вызовов X в отложенном массиве.

Я знаю, почему это происходит, но это расстраивает меня, когда я проверяю длину массива.Аргументы не являются массивом, когда есть только 1 объект, и где их больше 1. Это очевидно.Могу ли я что-нибудь сделать, чтобы возвращаемый параметр не просто представлял первый вызов?

1 Ответ

1 голос
/ 20 декабря 2011

Аргументы, подобные этому, всегда отражают контекст непосредственной функции и никогда не ссылаются на внешний контекст. Вы также использовали ссылку на исходный массив, который не изменяется в зависимости от этого кода.

Ваш исходный массив и объект Arguments - это не одно и то же, они просто имеют те же ссылки на объекты, что и члены. Аргументы никогда не являются массивом и всегда имеют свойство длины (исходя из ваших утверждений, я думаю, вы делаете некоторые ложные предположения об аргументах).

Аргументы в параметре then будут различаться в зависимости от типа и количества отложений в вызове when. Смотрите спецификацию.

Наконец, я не могу опубликовать рабочий код для вас, поскольку итеративная переменная ContentUnits не отображается.

Я думаю, что есть лучший способ сделать то, что вы пытаетесь сделать, только вы на самом деле не сказали, что вы пытались сделать. Я думаю, что есть

...