javascript - async/await 中await接收的promise的問題
問題描述
在async/await中,await接收的需要是一個(gè)promise對象,那么我這樣寫:
async getAddressList () {this.list = await AreaSvr.getList(320100); }getAddressList().catch((err) => { ... });
AddressSvr.getList = function (pid) { return new Promise((resolve, reject) => { Vue._http.get(’area/get’, {pId: pid}).then( res => {resolve(res.Data); }, err => {reject(err); }); })};
這樣是沒有問題的,AreaSvr.getList中返回的是一個(gè)promise對象。現(xiàn)在我把AreaSvr.getList封裝一下,加一個(gè)緩存:
let areaList = [];AddressSvr.getAreaList = (level, pid) => {// 接收等級跟pid兩個(gè)參數(shù),如果已有areaList或者相關(guān)二級list,直接返回Promise.resolve(...) if (level === 1 && areaList.length !== 0) { return Promise.resolve(areaList) } else if (level === 2) { for (let i = 0; i < areaList.length; i++) { if (areaList[i].AreaId === pid && areaList[i].children.length !== 0) {return Promise.resolve(areaList[i].children) } } } // 這里對之前的http請求AddressSvr.getList進(jìn)行封裝,在獲取到相關(guān)值之后,進(jìn)行緩存并且返回 return new Promise(// 返回一個(gè)promise對象,讓await來接收 (resolve, reject) => { AddressSvr.getList(pid).then(res => { if (level === 1) { areaList = res;// 緩存areaList return resolve(areaList); //返回 } for (let i = 0; i < areaList.length; i++) { if (areaList[i].AreaId === pid) { areaList[i].children = res;// 緩存子列表 return resolve(areaList[i].children);// 返回 } }}, err => { reject(err);} ); } );};
async getAddressList () {this.list = await AreaSvr.getAreaList(1, 320100);//這里傳入等級,使用加了緩存的函數(shù)if (this.list.length !== 0) { this.childList = await AreaSvr.getAreaList(2, this.list[0].AreaId);} }
在這里,我在AddressSvr.getList的外面封裝了一層promise做了緩存,這時(shí)候await接收的是AddressSvr.getAddressList 這個(gè)函數(shù)返回的promise了,但是這個(gè)時(shí)候返回的promise無效,直接catch到error了,請問一下我哪邊寫的有問題?
問題解答
回答1:如果直接catch了,說明寫法沒有問題,可能是業(yè)務(wù)部分出錯(cuò)了,可以把error信息貼出來看看
回答2:我在上面判斷是否有緩存的地方用的是areaList[i].children.length !== 0,這個(gè)時(shí)候還沒有children,是undefind,所以會報(bào)錯(cuò)。這個(gè)不是async/await的用法問題,是我自己寫錯(cuò)了。
相關(guān)文章:
1. docker安裝后出現(xiàn)Cannot connect to the Docker daemon.2. Docker for Mac 創(chuàng)建的dnsmasq容器連不上/不工作的問題3. docker-machine添加一個(gè)已有的docker主機(jī)問題4. docker - 如何修改運(yùn)行中容器的配置5. java - Spring boot 讀取 放在 jar 包外的,log4j 配置文件,系統(tǒng)有創(chuàng)建日志文件,不寫入日志信息。6. angular.js - Angular 2 + Django構(gòu)建的Web應(yīng)用, 如何合理搭配 ?7. objective-c如何實(shí)現(xiàn)java中的反射機(jī)制8. css - 定位為absolute的父元素中的子元素 如何設(shè)置在父元素的下面?9. java - 請問在main方法中寫成對象名.屬性()并賦值,與直接參參數(shù)賦值輸錯(cuò)誤是什么原因?10. android studio總是在processes running好久
