我无法传递所有论点。我的承诺回调只收到一个而不是三个:
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);
});
知道我做错了吗?
答案 0 :(得分:12)
Q promises可以resolve
d只有一个参数 - 一个promise表示一个值,而不是它们的集合。如果需要多个值,请将它们显式放入数组中。对于多参数回调,您可以使用.spread()
。
答案 1 :(得分:2)
同步函数只返回一个值,异步应该用一个值解析。
创建使用许多值解析的异步函数是一种不好的做法。如果要传递多个值,请在数组或dict对象中返回它们,就像给定函数同步一样。
答案 2 :(得分:0)
如果要传递多个值,则必须将它们包装在另一个传递的值中,例如数组或对象。