經常遇到這樣的需求,循環請求數據渲染頁面,光寫循環請求包裹請求實體達不到想要的目的,那么要怎么做?
首先要知道循環的原理,在你循環請求接口數據的時候,循環體執行完畢,可能接口還沒有執行完畢,這樣導致一個結果渲染的結果每次都不相同。
怎么解決循環體執行一次異步請求,同步等待處理方法呢,async與await配合使用才能使異步操作同步化,await就是等待的意思,等待某一個函數執行完之后,后面的代碼才能開始執行。有個弊端是如果數據遲遲不返回,下一次循環還沒有開始就會導致頁面卡住,可用Promise.all代替即可。
下面是react寫法,具體代碼
@action async getMonitor() {
for (let i = 0; i < this.selectMonitorList.length; i++) {
let param = {
參數
};
await 調用接口方法名(param).then((res) => {
if (res instanceof Object && res.code === 0) {
處理數據
} else {
message.destroy();
message.error(res.msg);
}
});
}
}
總結:循環數據的時候用for循環,如果用其他循環會報錯ESLint的錯誤