.然后链接不起作用。为什么?
.then chaining doesn't work. Why?
我想从后端使用 AJAX 加载数据。
有 4 个 AJAX 请求(我不想使用 jQuery)。
如果所有请求都已完成,我将处理 received/loaded 数据。
异步伪代码:
- 加载客户表
- 加载项目表
- 加载报价表
- 加载相位表
- 现在用数据做一些事情...
我正在学习并尝试使用 .then() 链接进行承诺。
函数 getMySqlTable() return 如果 AJAX 调用完成则承诺:
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)
})
有人可以帮我吗?
如果您在回调中使用大括号,则需要您 return 一个值。在每个 then 调用中执行 "return getMySqlTable(...)"。
我想从后端使用 AJAX 加载数据。 有 4 个 AJAX 请求(我不想使用 jQuery)。 如果所有请求都已完成,我将处理 received/loaded 数据。
异步伪代码:
- 加载客户表
- 加载项目表
- 加载报价表
- 加载相位表
- 现在用数据做一些事情...
我正在学习并尝试使用 .then() 链接进行承诺。
函数 getMySqlTable() return 如果 AJAX 调用完成则承诺:
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)
})
有人可以帮我吗?
如果您在回调中使用大括号,则需要您 return 一个值。在每个 then 调用中执行 "return getMySqlTable(...)"。