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);
});
Любая идея, что я делаю неправильно?
Ответы
Ответ 1
Q promises может быть resolve
d только с одним аргументом - обещание означает одно значение, а не набор из них. Поместите их в массив явно, если вам нужно несколько значений. Для многопараметрических обратных вызовов вы можете использовать .spread()
.
Ответ 2
Синхронные функции возвращают только одно значение, так же, как асинхронно должно разрешаться с одним.
Это плохая практика для создания асинхронных функций, которые разрешают многие значения. Если вы хотите передать много значений, верните их в массив или объект dict, как и вы, если заданная функция будет синхронной.
Ответ 3
Если вы хотите передать несколько значений, вы должны обернуть их еще одним переданным значением, например массивом или объектом.