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

时间:2013-07-31 12:27:43

标签: javascript node.js promise deferred q

我无法传递所有论点。我的承诺回调只收到一个而不是三个:

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); 
});

知道我做错了吗?

3 个答案:

答案 0 :(得分:12)

Q promises可以resolve d只有一个参数 - 一个promise表示一个值,而不是它们的集合。如果需要多个值,请将它们显式放入数组中。对于多参数回调,您可以使用.spread()

答案 1 :(得分:2)

同步函数只返回一个值,异步应该用一个值解析。

创建使用许多值解析的异步函数是一种不好的做法。如果要传递多个值,请在数组或dict对象中返回它们,就像给定函数同步一样。

答案 2 :(得分:0)

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