错综复杂的承诺
Imbricated promises
我想做什么: 获取项目列表(来自 API),请求每个项目的状态。并调用一个应该代表我的项目的全局状态的回调。
我是如何尝试的: 第一个 promise 获取所有项目并在第一个 然后 中,我试图为每个项目调用一个 getProjectStatus 来获取状态。我希望我的第二个 then 等待我完成迭代(我尝试了很多不同的东西,但我的第二个 then 总是在之前被调用)。我不知道这是否是对 promises 的一个很好的使用...
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)});
这应该让你继续。您只需在第二个承诺的数组上使用 Promise.all
。我可能不明白 getProjectStatus
的确切语法,但你可以调整我希望如果需要
return request(this.options)
.then(function(projects) {
return Promise.all( projects.map(element => that.getProjectStatus(element.id) )
.then(function(){
callback(finalStatus)});
我想做什么: 获取项目列表(来自 API),请求每个项目的状态。并调用一个应该代表我的项目的全局状态的回调。
我是如何尝试的: 第一个 promise 获取所有项目并在第一个 然后 中,我试图为每个项目调用一个 getProjectStatus 来获取状态。我希望我的第二个 then 等待我完成迭代(我尝试了很多不同的东西,但我的第二个 then 总是在之前被调用)。我不知道这是否是对 promises 的一个很好的使用...
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)});
这应该让你继续。您只需在第二个承诺的数组上使用 Promise.all
。我可能不明白 getProjectStatus
的确切语法,但你可以调整我希望如果需要
return request(this.options)
.then(function(projects) {
return Promise.all( projects.map(element => that.getProjectStatus(element.id) )
.then(function(){
callback(finalStatus)});