2014-10-08 36 views
0

一切都是异步的。 Http.request在完成时正在获取函数回调。 问题是调用http.request的函数是基于http请求的结果递归调用并非确定性的。node.js - 我如何知道所有(递归)“http.request”结束?

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

+0

您应该使用的承诺。 – SLaks 2014-10-08 00:30:04

回答

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

这是如何映射到我的情况?我不知道人是如何得到我需要的。我所做的“GET”越多,我可能需要的“GETS”越多,递归地,非确定性地,取决于身体的内容意味着什么。 – JasonGenX 2014-10-08 02:50:24

+0

然后使用不同的东西,例如['async.queue'](https://github.com/caolan/async#queue)。 'async'非常灵活... – mscdex 2014-10-08 03:04:00