1

关于这个问题已经有很多帖子了,但我仍然无法解决这个特殊问题。

如果我必须调用三个外部站点 Facebook、Twitter 和 Instagram,并且我以异步并行方式启动所有三个站点,它会挂起 20 秒等待 Facebook 响应,我不确定会发生什么。Twitter 和 Instagram 的调用是否开始,并且它们都在调用 Facebook 之前运行并可能完成,或者整个用户线程是否暂停直到下一轮事件循环,并且另一个用户调用通过?在我们看来是后者。还是整个线程都停止并等待?

根据请求,这里是代码的精简版本。Service_requests 是一组调用 Facebook、Instagram 和 Twitter 的函数。这里还有很多其他的东西,但它的内容很简单。

 Async.parallel(service_requests, function (err, results)
 {
      if (err) { next(err); return; }

      var articles = [];

      for (var i = 0; i < results.length; i++)
      {
           articles = articles.concat(results[i]);
      }

      next(null, articles);
 });
4

1 回答 1

2

当您向服务发出并行请求时,它们都“同时”发生。因此,如果 facebook 需要 20 秒才能返回,twitter 需要 15 秒,instagram 需要 25 秒,那么从您发起所有请求开始,您将在 25 秒内获得所有数据。

此外,当节点等待来自这些服务的响应时,它可以自由地为其他请求提供服务。

事件循环不会停止并等待响应,如果存在其他工作,它会继续执行其他工作。

当所有 3 个服务都响应数据时,异步库将调用您的最终回调并返回结果。

于 2013-10-01T06:33:41.843 回答