NodeJS – 使while循环同步

我有一段代码

var page = 2; var last_page = 100; while(page <= last_page) { request("http://some_json_server.com/data?page=" + page, function (error, response, body) { if (!error && response.statusCode == 200) { store_data(body) } page++; }); } 

我已经做了以下,但它实际上不检索任何东西。 我正确地做这个?

 var page = 2; var last_page = 100; while(page <= last_page) { var async_arr = []; async_arr.push( function(next) { request("http://some_api_url?page=" + page, function (error, response, body) { if (!error && response.statusCode == 200) { store_data(body); } }); } ); async.series( async_arr, done ); 

你正在寻找async.whilst() 。 这个解决scheme假设你实际上想要做每个请求之后。 由于@UpTheCreek提到( 编辑 :我提到的评论被编辑)它可能会做到asynchronous,并跟踪每个结果使用async.parallel

 var page = 2, lastPage = 100; async.whilst(function () { return page <= lastPage; }, function (next) { request("http://some_json_server.com/data?page=" + page, function (error, response, body) { if (!error && response.statusCode == 200) { store_data(body) } page++; next(); }); }, function (err) { // All things are done! }); 

while你得到一个繁忙的循环,这是在节点的反目的。

使其成为一个recursion函数。 每个电话将在一个单独的剔号中完成。

 var page = 2; var last_page = 100; (function loop() { if (page <= last_page) { request("/data?page=" + page, function (error, response, body) { if (!error && response.statusCode == 200) { store_data(body) } page++; loop(); }); } }());