我想做什么:获取项目列表(来自API),请求每个项目的状态。并调用一个回调,该回调应代表我项目的全局状态。
我是如何尝试的:第一个 承诺 获取所有项目并在第一个 然后< / em> 我试图为每个项目调用一个应该获得状态的getProjectStatus。我希望我的第二个 然后 等待我完成迭代(我尝试了许多不同的东西,但我的第二个然后总是被调用)。我不知道这是否很好地使用了承诺......
var that = this;
var options = { url : this.host + "projects", json : true }
var finalStatus = "SUCCESS";
// first promises
return request(this.options)
.then(function(projects) {
projects.forEach(function(element, index, array) {
// second promises
that.getProjectStatus(element.id, function(status){})
.then(function(status) {
if(status != "SUCCESS)
{
finalStatus = "FAILURE";
}
});
})
})
.then(function(){
callback(finalStatus)});
答案 0 :(得分:1)
这应该让你去。您只需在第二个承诺的数组上使用Promise.all
。我可能没有理解getProjectStatus
的确切语法,但你可以调整我希望如果需要
return request(this.options)
.then(function(projects) {
return Promise.all( projects.map(element => that.getProjectStatus(element.id) )
.then(function(){
callback(finalStatus)});