在工作中有時候會遇到這樣的需求一個頁面有多個區域,每個區域根據不同的條件去后台查同一個接口。
當我調用此接口兩次的時候,其中一個是不會生效的,甚至network中你會發現只發了一次請求,
后來我試了一下調第二個方法的時候放在setimeOut中,時間是1000ms問題解決,但是改成100,接口會報錯(cancel)后台沒有任何的響應不知道狀態碼,因為封裝的axios公用函數里面做了限制統一接口同一時間只能請求一次。
也想過在第一次接口請求成功后在調一次該接口。這樣寫不優雅 回到地獄比較low。
后來我換成了async await的方式解決了該問題
watch: {
'qualityModel.modelCode': {
async handler(val) {
this.modelCode = '';
this.uniqueConstList = [];
this.connConstList = [];
this.uniqueConst.removeAll;
this.connConst.removeAll;
if (val) {
this.modelCode = val;
await this.getUniqueConstList();
await this.getConnConstList();
}
},
deep: true
}
methods:{
// 獲取所有唯一約束
async getUniqueConstList() {
let param = { modelCode: this.modelCode, type: '0' };
let response = await Rule.getConstraintList(param, 0);
response.data.forEach(item => {
item.check = false;
item.constraintCheckRemindLimit = 30;
item.constraintCheckWarnLimit = 50;
this.qualityModelConstEntityList.forEach(ids => {
if (ids.constId === item.id) {
item.check = true;
item.constraintCheckRemindLimit = Number(
ids.constraintCheckRemindLimit
);
item.constraintCheckWarnLimit = Number(
ids.constraintCheckWarnLimit
);
}
});
});
this.uniqueConstList = response.data;
},
// 獲取所有關聯約束
async getConnConstList() {
let param = { modelCode: this.modelCode, type: '1' };
let response = await Rule.getConstraintList(param, 0);
response.data.forEach(item => {
item.check = false;
item.constraintCheckRemindLimit = 30;w
item.constraintCheckWarnLimit = 50;
this.qualityModelConstEntityList.forEach(ids => {
if (ids.constId === item.id) {
item.check = true;
item.constraintCheckRemindLimit = Number(
ids.constraintCheckRemindLimit
);
item.constraintCheckWarnLimit = Number(
ids.constraintCheckWarnLimit
);
}
});
});
this.connConstList = response.data;
}
}
具體的async await代碼貼上
