2016-10-24 130 views
0

我正在使用Q.js作为承诺。在下面的代码中,每个方法都会进行ajax调用,然后返回一个promise。一切工作与每个方法执行和完成预计未来开始之前:承诺:如何并行执行异步方法,然后执行方法

functionOne().then(junctionTwo) 
       .then(functionThree) 
       .then(doSomethingElse); 

我真的想不过是functionOne,functionTwo和functionThree所有可以同时执行和“doSomethingElse”应该只有在执行前3种方法已完成。

你如何用promises/Q.js来实现这个?

回答

1

可以使用现在标准化Promise.all()告诉你什么时候承诺的阵列全部完成仍然使用Q库语法,那么你可以使用Q.all(),它可以做同样的事情。

Q.all([functionOne(), functionTwo(), functionThree()]).then(function(results) { 
    // all are done here 
    doSomethingElse(); 
}).catch(function(err) { 
    // error in at least one promise here 
}); 

你应该知道,在node.js中或浏览器中,没有“同时”,因为JS是单线程(这不被这里使用webWorkers之外)。但是,如果你的操作是异步的(我假设他们返回了承诺),那么他们都可以同时在飞行中,尽管在任何特定时刻只有一个正在执行。

+1

为什么downvote?看起来像一个串行downvoter问题,所有的答案都得到了downvotes。奇怪的是没有解释。如果没有人提供他们认为值得赞扬的理由,那么很难提高你的答案。 Downvotes可能只是惩罚性的,或者他们可以通过解释你认为是错误的来鼓励改善,从而使整个社区受益。 – jfriend00

+0

也许他确实惩罚了你回答(而不是投票结束)一个严重研究的问题?我们无法知道,选票是主观的。我只能断言你的答案的内容客观上没有错,你有我的+1。 – Bergi

+0

这是一个严重研究的问题吗?任何具有已知答案的问题都可以被一个有答案的人称为“严重研究”,不是吗?感谢jfriend00和kouak。我不知道这已经被添加到该语言。 – Sean