[英].then chaining doesn't work. Why?
我想從后端使用AJAX加載數據。 有4個AJAX請求(我不想使用jQuery)。 如果所有請求都完成了,我將處理接收/加載的數據。
異步偽代碼:
我正在學習並嘗試通過.then()鏈接實現諾言。
如果完成了AJAX調用,則函數getMySqlTable()返回一個promise:
function getMySqlTable(theCase){
return new Promise(function (resolve,reject){
let data = {header:{case:theCase}};
//AJAX request
let ajGetProjectsAsOptions = new AjaxJsonRequest('php/ajax/customerDesk.php',data,function(xmlhttp){
let response = JSON.parse(xmlhttp.responseText);
if(response.status){
switch(theCase){
case 'getCustomerTable':
customerTable = response.data.customers;
resolve(true);
break;
case 'getProjectTable':
projectTable = response.data.projects;
resolve(true);
break;
case 'getOfferTable':
offerTable = response.data.offers;
resolve(true);
break;
case 'getPhaseTable':
phaseTable = response.data.phases;
resolve(true);
break;
}
}else{
printMessages(response.message);
reject(false);
}
});
ajGetProjectsAsOptions.doRequest();
});
}
以下代碼可以正常工作並滿足我的要求:
getMySqlTable('getCustomerTable')
.then(()=>getMySqlTable('getProjectTable'))
.then(()=>getMySqlTable('getOfferTable'))
.then(()=>getMySqlTable('getPhaseTable'))
.then(
function(){
console.log(customerTable);
console.log(projectTable);
console.log(offerTable);
console.log(phaseTable);
}
)
但是,如果我想通過添加方括號來做更多的事情,那是行不通的。 如果添加一些方括號,則所有.then都將立即執行。 為什么?
getMySqlTable('getCustomerTable')
.then(()=>{
getMySqlTable('getProjectTable')
})
.then(()=>{
getMySqlTable('getOfferTable')
})
.then(()=>{
getMySqlTable('getPhaseTable')
})
.then(()=>{
console.log(customerTable);
console.log(projectTable);
console.log(offerTable);
console.log(phaseTable)
})
有人可以幫我嗎?
如果在回調中使用大括號,則需要返回一個值。 在每個then調用中執行“返回getMySqlTable(...)”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.