node.js - 我怎么知道所有(递归)" http.request"结束?

时间:2014-10-08 00:27:25

标签: node.js

一切都是异步的。 Http.request在完成后会得到函数回调。 问题是调用http.request的函数是基于http请求的结果以递归和非确定的方式调用的。

我怎么知道我在这个异步世界里真的完成了什么? 只需保持“任务开始与任务完成”计数器? 有更优雅的方式吗?

2 个答案:

答案 0 :(得分:1)

async模块有许多用于组织异步任务的实用工具。

例如,如果您有一个想要获取的网址数组:

var http = require('http');
var async = require('async');

var urls = ['http://google.com', 'http://nodejs.org', 'http://stackoverflow.com'];

async.map(urls, function(url, cb) {
  http.get(url, function(res) {
    var buf = '';
    res.on('data', function(d) {
      buf += d;
    }).on('end', function() {
      cb(null, buf);
    });
  });
}, function(err, responses) {
  // responses is an array containing response bodies of a GET to each url:
  // responses[0] = response for google.com
  // responses[1] = response for nodejs.org
  // ...
});

答案 1 :(得分:0)

这是一个很好的问题,目前有一个更好的解决方案:

创建一个promise并使用promise.all,如果您希望100%异步,请使用promise resolve使用下一个arg再次调用该函数。

通过这种方式,可以100%确保一旦完成了最后一个承诺,其他所有承诺都将实现。

我确实建议async.queue具有可控制级别的并发处理