Javascript 在node中,使用Q,使两个函数并行工作,但只等待第一个函数实现其承诺
在我的环境中,我使用node+q(我不是这方面的专家),所以主要的论点是:承诺 我有一个函数,需要并行执行两个操作,一个很长,一个很短Javascript 在node中,使用Q,使两个函数并行工作,但只等待第一个函数实现其承诺,javascript,node.js,workflow,promise,q,Javascript,Node.js,Workflow,Promise,Q,在我的环境中,我使用node+q(我不是这方面的专家),所以主要的论点是:承诺 我有一个函数,需要并行执行两个操作,一个很长,一个很短 var parallelWrapper=函数(输入){ var deferred=Q.deferred(); var fastPromise=fastcompulation() .then(功能(数据){ 延迟解析(数据) }, 功能(err){ 延迟。拒绝(错误) }); //当然,下面这一个不会正常工作 var slowPromise=slowComput
var parallelWrapper=函数(输入){
var deferred=Q.deferred();
var fastPromise=fastcompulation()
.then(功能(数据){
延迟解析(数据)
},
功能(err){
延迟。拒绝(错误)
});
//当然,下面这一个不会正常工作
var slowPromise=slowComputation()
.then(功能(数据){
做某事;
})
.then(功能(数据){
makeSomethingElse();
})
.失败(功能(错误){
控制台日志(err);
});
Q.all([快速承诺,慢速承诺]);
兑现诺言;
}
我会这么做:
var parallelWrapper = function(input) {
var fastPromise = fastComputation();
var slowPromise = slowComputation()
.then(function(data) {
return makeSomething();
})
.then(function(data) {
return makeSomethingElse();
}).catch(console.error);
return Q([fastPromise, slowPromise]).all();
}
第二个例子是这样的:
var myLongChainOfFunctions = function() {
return firstFunction(someParams)
.then(secondFunction)
.then(thirdFunction)
/*...*/
.then(parallelWrapper)
/*...*/
.then(lastFunction)
.catch(doSomethingWithError)
}
好的,你可以这样做:
var parallelWrapper = function(input) {
slowComputation()
.then(function(data) {
return makeSomething();
})
.then(function(data) {
return makeSomethingElse();
}).catch(console.error);
return fastComputation();
}
你的
Q.all();你可以直接使用这个承诺。听起来你想返回两个单独的承诺。好吧,也许我应该在一开始就澄清一下:这只是一个例子,不应该运行或其他什么。我的问题是:我们是否可以并行运行两个函数,但只等待其中一个函数,然后再继续,而另一个函数则异步完成其任务,因为它无论如何都不会影响工作流?为什么不这样做?异步函数不会因为没有观察到其结果而神奇地停止。但是,您需要决定如何处理错误。是的,但这种方式无法实现并行包装,并且在快速和慢速计算准备就绪之前,链不会继续运行,对吗?我希望它能在FastComputing准备好进行编辑后继续,但它似乎没有按照我希望的方式工作:我编辑了问题的代码,主要问题是parallelWrapper后面链接的'then'函数没有任何输入参数,但未定义,虽然我希望它能有FastComputing的结果作为输入参数,但在input Parameter中,您将从FastComputing()返回数据。如果您没有定义FastComputing()中有问题,我可以看到这个函数体?好的,那么您的解决方案已经实现,并在步骤4中生成以下输出:4。应该有快速计算结果:未定义您必须返回数据在63行中的parallelWrapper承诺。