javascript - async/await 中await接收的promise的问题
问题描述
在async/await中,await接收的需要是一个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中返回的是一个promise对象。现在我把AreaSvr.getList封装一下,加一个缓存:
let areaList = [];AddressSvr.getAreaList = (level, pid) => {// 接收等级跟pid两个参数,如果已有areaList或者相关二级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进行封装,在获取到相关值之后,进行缓存并且返回 return new Promise(// 返回一个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);//这里传入等级,使用加了缓存的函数if (this.list.length !== 0) { this.childList = await AreaSvr.getAreaList(2, this.list[0].AreaId);} }
在这里,我在AddressSvr.getList的外面封装了一层promise做了缓存,这时候await接收的是AddressSvr.getAddressList 这个函数返回的promise了,但是这个时候返回的promise无效,直接catch到error了,请问一下我哪边写的有问题?
问题解答
回答1:如果直接catch了,说明写法没有问题,可能是业务部分出错了,可以把error信息贴出来看看
回答2:我在上面判断是否有缓存的地方用的是areaList[i].children.length !== 0,这个时候还没有children,是undefind,所以会报错。这个不是async/await的用法问题,是我自己写错了。
相关文章:
1. javascript - SuperSlide.js火狐不兼容怎么回事呢2. 一个走错路的23岁傻小子的提问3. java - 创建maven项目失败了 求解决方法4. 运行python程序时出现“应用程序发生异常”的内存错误?5. html5 - iOS的webview加载出来的H5网页,怎么修改html标签select的样式字体?6. java-se - 正在学习Java SE,为什么感觉学习Java就是在学习一些API。7. python - 如何使用pykafka consumer进行数据处理并保存?8. javascript - git clone 下来的项目 想在本地运行 npm run install 报错9. 主从备份 - 跪求mysql 高可用主从方案10. python - django 里自定义的 login 方法,如何使用 login_required()
