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

Nic*_*ick 16 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); 
});
Run Code Online (Sandbox Code Playgroud)

知道我做错了什么吗?

Ber*_*rgi 13

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

  • @Tomalak:您可以编写更简洁的回调函数,而无需访问值的属性/索引.将数组视为元组,而不是列表.[`$ .ajax` promises](http://api.jquery.com/jQuery.ajax/#jqXHR)就是一个很好的例子. (2认同)