示例描述:点击一个按钮,需要清空不同的文件数据。如果直接发起三次路由请求,页面中代码有出现某一次发起全部数据清空操作,所有按钮均失效的情况(也许是特例),连续发送三个请求可能会导致并发请求,从而可能导致服务器过载或响应时间变慢。那么需要将代码进行同步执行。(其中'/deleteData'路由用来接收不同的id确定需要清空什么数据。 )
解答:建议使用Promise.all()或async/await等方法来确保每个请求都完成后再执行下一个请求。
错误示例:
$.post('/deleteData',{id:1},function(res){
})
$.post('/deleteData',{id:10},function(res){
})
$.post('/deleteData',{id:100},function(res){
})
Promise.all()示例代码:
const promise1 = $.post('/deleteData',{id:1});
const promise2 = $.post('/deleteData',{id:10});
const promise3 = $.post('/deleteData',{id:100});
Promise.all([promise1, promise2, promise3])
.then(function(results) {
// 所有请求都完成后执行的回调函数
})
.catch(function(error) {
// 处理错误
});
async/await示例代码:
// 清空所有结果
async function deleteData(){
try{
const result1 = await $.post('/deleteData',{id:1});
const result2 = await $.post('/deleteData',{id:10});
const result3 = await $.post('/deleteData',{id:100});
// 所有请求都完成后执行的代码
} catch (error) {
console.log(err.message);
}
}
//调用函数
deleteData();