我想并行执行许多http get请求,映射结果,然后在所有结果准备好后重新同步(加入)以呈现结果页面。
伪代码:
var value_needed_to_render_page = async.parallel([array of values to iterate over], function to call in parralel on array).join()
return page_render(value_needed_to_render_page);
我一直在研究async和FutureJS,但是没有找到一个好的方法。
最佳答案
一种解决方案是使用诺言。 Q.all
将期望列表中的每个函数都返回一个诺言,并且将等到所有诺言得到解决。以下示例使用q.js https://github.com/kriskowal/q:
Q.all([
functionToFireRequest1,
functionToFireRequest2,
// (...)
functionToFireRequestN
]).then( function() {
doStuff();
});
Q.all
会收到一个功能列表,因此您也可以以编程方式生成该列表。例如,“ functionToFireRequest”将如下所示:
function functionToFireRequest1() {
var deferer = Q.defer();
doMyRequestABCFoo( function() { deferer.resolve() } );
// callback should be called inside your request after it finishes
return deferer.promise;
}