node.js-我如何知道所有(递归)“;http.request";结束?

node.js-我如何知道所有(递归)“;http.request";结束?,node.js,Node.js,一切都是异步的。完成后,Http.request将获得函数回调。 问题是调用http.request的函数正在根据http请求的结果以递归和非确定性方式调用 我如何知道在这个异步世界中我什么时候真正完成了? 只需保留为“任务已启动vs.任务已完成”计数器? 有没有更优雅的方法?该模块有许多有用的实用程序来组织异步任务 例如,如果您有一个要获取的URL数组: var http = require('http'); var async = require('async'); var urls =

一切都是异步的。完成后,Http.request将获得函数回调。 问题是调用http.request的函数正在根据http请求的结果以递归和非确定性方式调用

我如何知道在这个异步世界中我什么时候真正完成了? 只需保留为“任务已启动vs.任务已完成”计数器? 有没有更优雅的方法?

该模块有许多有用的实用程序来组织异步任务

例如,如果您有一个要获取的URL数组:

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
  // ...
});

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

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

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


我建议async.queue具有受控的并发处理级别

您应该使用承诺。这与我的情况如何对应?我不知道我需要什么样的男人。我做的“GET”越多,我可能需要的“GET”就越多,这取决于主体内容的含义,递归地、非确定性地<代码>异步非常灵活。。。