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
的结果将是一个包含解析值 promiseA
和 promiseB
的数组。
对 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 的解决方案。
我的 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
的结果将是一个包含解析值 promiseA
和 promiseB
的数组。
对 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 的解决方案。