Q.all 不工作

Q.all is not working

我的 node.js e2e 测试有问题。我想等待 2 个承诺来解决。但是由于某种原因,当我使用 Q.all 时,它只是冻结了我的应用程序。我正在使用 kriskowal 的 Q 1.0.0.

这个有效:

var doStuff = function() {
    var promiseA = getPromiseA();
    return promiseA;
}


var prepareTestData = function(done) {
    doSomething()
    .then(doStuff)
    .then(done);
}

但这不是:

var doStuff = function() {
    var promiseA = getPromiseA();
    var promiseB = getPromiseB();
    return [promiseA, promiseB];
}


var prepareTestData = function(done) {
    doSomething()
    .all(doStuff)
    .then(done);
}

有人可以帮我解决我所缺少的吗?

Q.all()有两种使用方式

一种是对承诺数组使用 Q.all() 来创建一个承诺,其结果是这些承诺的所有决议的数组。

var doStuff = function() {
    var promiseA = getPromiseA();
    var promiseB = getPromiseB();
    return Q.all([promiseA, promiseB]);
}


var prepareTestData = function(done) {
    doSomething()
    .then(doStuff)     // use then here
    .then(done);
}

另一个(如 nikc.org 的回答所示)是调用 .all() 一个 promise,其结果是一个 promise 数组。这将产生一个新的承诺,其结果是所有这些承诺的决议的数组:

var doStuff = function() {
    var promiseA = getPromiseA();
    var promiseB = getPromiseB();
    return [promiseA, promiseB];
}


var prepareTestData = function(done) {
    doSomething()
    .then(doStuff)
    .all()
    .then(done);
}

在这两种情况下,传递给 done 的结果将是一个包含解析值 promiseApromiseB 的数组。

Promise.all 的调用应该在调用返回承诺数组的 doStuff 之后进行。或者,您 return Q.all(Array) 来自 doStuff

var prepareTestData = function(done) {
    doSomething()
    .then(doStuff) // array returned here
    .all()         // all creates a promise of promises
    .then(done);
}

* 已更新 *

您问题的简单答案是 all() 原型方法不接受参数,因此 .all(doStuff) 仅在 doSomething() 返回的承诺上调用 .all() 并且 doStuff 结束是一个从未使用过的论点。最简单的解决方案是使用 nikc.org 的解决方案。