我想并行执行许多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;
}

08-18 09:39