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(); }); } }());