16

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

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

知道我做错了什么吗?

4

3 回答 3

13

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

于 2013-07-31T15:42:28.663 回答
2

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

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

于 2013-08-01T19:25:57.253 回答
0

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

于 2015-02-06T15:03:32.260 回答