我在传递所有参数时遇到问题。我的promise回调只收到一个而不是三个:
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);
});
知道我做错了什么吗?
Q promise可以是只有一个参数的resolve
d——promise代表一个值,而不是它们的集合。如果需要多个值,请将它们显式地放入数组中。对于多参数回调,可以使用.spread()
。
同步函数只返回一个值,异步函数应该用一个值来解析。
创建使用多个值进行解析的异步函数是一种糟糕的做法。若要传递多个值,请在数组或dict对象中返回它们,就像给定函数是同步的一样。
如果要传递多个值,则必须将它们封装在传递的另一个值中,例如数组或对象。