javascript承诺不传递所有参数(使用Q)



我在传递所有参数时遇到问题。我的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对象中返回它们,就像给定函数是同步的一样。

如果要传递多个值,则必须将它们封装在传递的另一个值中,例如数组或对象。

相关内容

  • 没有找到相关文章

最新更新