Q.所有工作都不起作用

Q.all is not working

本文关键字:不起作用 工作      更新时间:2023-09-26

我的节点有问题.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);
}

有人可以帮助我解决我缺少的东西吗?

*

更新 *

对你的问题的简化答案是 all() 原型方法不接受参数,所以 .all(doStuff) 只在 doSomething() 返回的承诺上调用 .all(),而 doStuff 最终成为一个从未使用的参数。 最简单的解决方案是使用nikc.org的解决方案。

有两种方法可以在 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()一个承诺,其结果是一系列承诺。这将产生一个新的承诺,其结果是所有这些承诺的一系列决议:

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之后。或者,您可以从doStuff return Q.all(Array)

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