2014-10-08 193 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