2016-02-17 76 views
1

我有以下循环提出10个请求。 console.log将打印从1到10.如何修改此代码以仅打印peopleProfile(10)的最终长度?如何等待回调完成?

for (var i = 0; i < 10; i++) { 
    request(URL, function(err, response, body) { 
    if (err) { 
     console.log(err); 
    } 
    if (!err && response.statusCode == 200) { 
     peopleProfile.push(body); 
     console.log(peopleProfile.length); 
    } 
    }); 
} 
+1

你不能这样做异步和循环,你基本上做10个请求同时,不是按顺序。 – elclanrs

+0

你能指出一个更好的方法来解决这个问题吗?我想提出10个请求并将每个请求的响应存储到'peopleProfile'。 – Bun

+1

我的目标是像'sequence(range(1,10).map(request(url))',其中'request(url)'返回一个promise,'sequence'接受一个promise数组并运行它们 – elclanrs

回答

2

可以使用蓝鸟 - 一个承诺库这个

var promises = []; 
for (var i = 0; i < 10; ++i) { 
    promises.push(requestAsync(url)); 
} 
Promise.all(promises).then(function() { 
    console.log("print this after finishing 10 requests"); 
}); 
+1

这正是我在谈论的评论!只是没有能量发布解决方案! –

1

有没有理由不能这样做?

var completedRequests = 0; 

for (var i = 0; i < 10; i++) { 
    request(URL, function(err, response, body) { 
    completedRequests++; 
    if (err) { 
     console.log(err); 
    } 
    if (!err && response.statusCode == 200) { 
     peopleProfile.push(body); 
     if (completedRequests === 10) { 
     console.log(peopleProfile.length); 
     } 
    } 
    }); 
}