我的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);
}
有人可以帮我解决我错过的问题吗?
答案 0 :(得分:2)
*已更新*
你的问题的简化答案是all()原型方法不带参数,所以.all(doStuff)只调用doSomething()返回的promise的.all()和doStuff结束是一个从未使用过的论据。最简单的解决方案是使用nikc.org的解决方案。
答案 1 :(得分:1)
在Q中有两种方法可以使用.all()
。
一种是在promises数组上使用Q.all()
来创建一个promise,其结果是这些promise的所有分辨率的数组。
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
的结果都是一个数组,其解析值为promiseA
和promiseB
。
答案 2 :(得分:0)
对Promise.all
的调用应该在调用返回promises数组的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);
}