Подтвердить что ты не робот

Javascript обещание не передавать все аргументы (используя Q)

У меня возникают проблемы с передачей всех аргументов. Мой ответ callback получает только один вместо трех:

var asyncFunction= function(resolve) {
    setTimeout(function() {
        resolve("Some string that is passed", "and another", "third");
    }, 1000);
};

var promiseFunction = function () {
    var deferred = Q.defer();

    asyncFunction(deferred.resolve);

    return deferred.promise;
};

promiseFunction().then(function() {
    // Only one argument is passed here instead of 3
    // { '0': 'Some string that is passed' }
    console.log(arguments); 
});

Любая идея, что я делаю неправильно?

4b9b3361

Ответ 1

Q promises может быть resolve d только с одним аргументом - обещание означает одно значение, а не набор из них. Поместите их в массив явно, если вам нужно несколько значений. Для многопараметрических обратных вызовов вы можете использовать .spread().

Ответ 2

Синхронные функции возвращают только одно значение, так же, как асинхронно должно разрешаться с одним.

Это плохая практика для создания асинхронных функций, которые разрешают многие значения. Если вы хотите передать много значений, верните их в массив или объект dict, как и вы, если заданная функция будет синхронной.

Ответ 3

Если вы хотите передать несколько значений, вы должны обернуть их еще одним переданным значением, например массивом или объектом.