我在我的nodejs代碼中有一個promise鏈,我不明白爲什麼第二個'then'部分在第一個'then'部分完成執行之前正在執行。有人能幫我理解下面的代碼有什麼問題。承諾鏈沒有正確執行
.then(model=>{
return mongooseModel.find({})
.then(result=>{
return _.each(model.dataObj,data=>{
return _.each(data.fields,field=>{
if(_findIndex(result, {'field.type':'xxx'})>0)
{
return service.getResp(field.req) //this is a service that calls a $http.post
.then((resp)=>{
field.resp=resp;
return field;
})
}
})
})
})
.then(finalResult=>{
submit(finalResult); //this is being called before the then above is completely done
})
})
function submit(finalResult){
.....
}
我已經作出的變化如下您的問題
.then(model=>{
return Promise.each(model.dataObj,data=>{
return getRequest(data.fields)
.then(()=>{
return service.getResp(field.req) //this is a service that calls a $http.post
.then((resp)=>{
field.resp=resp;
return field;
})
})
})
.then(finalResult=>{
submit(finalResult);
})
})
function getRequest(fields){
return mongooseModel.find({})
.then(result=>{
if(_findIndex(result, {'field.type':'xxx'})>0)
{
}
})
}
這是[回調地獄]的一個最好的例子(https://stackoverflow.com/questions/25098066/what-the-hell-is-callback-hell-and-how-和 - 爲什麼rx-solves-it)我在一段時間看過。重新將您的數據架構變得更加平坦可能有助於調試這個和未來的問題。 – Will
甜蜜的耶穌,這是很多回調! –