在工作中有時候會遇到這樣的需求一個頁面有多個區域,每個區域根據不同的條件去后台查同一個接口。
當我調用此接口兩次的時候,其中一個是不會生效的,甚至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代碼貼上