如何将Promise<any[]>转换为any[]?async/await与Promise类型错误问题
问题分析:Promise类型不匹配错误
错误提示
Type 'Promise<any[]>' is missing the following properties from type 'any[]': length, pop, push, concat, and 29 more.
错误出现在语句:
objectList = this.markRequired(objectList, requiredList, typeCodeName);
相关代码
async applyRequiredTypes(objectList: any[], typeCodeName: any, requiredList: any[]) { objectList = objectList || []; requiredList = requiredList || []; objectList = this.markRequired(objectList, requiredList, typeCodeName); ... } async markRequired(itemList: any[], requiredList: any[], typeCodeName: any) { return itemList.map((item: any) => { item.required = requiredList.some((requiredTypeCode) => { return requiredTypeCode === item[typeCodeName]; }); return item; }); }
原因
你给markRequired加了async关键字,不管函数内部有没有异步操作,只要加了async,函数就会自动返回一个Promise对象,而不是你写的map返回的数组。但objectList的类型是any[],把Promise赋值给数组类型的变量,类型不匹配,所以TS报错。
解决办法
方法一:移除不必要的async
因为这个函数里全是同步操作(map和some都是同步方法),完全不需要async修饰。去掉后函数直接返回数组,类型就匹配了:
markRequired(itemList: any[], requiredList: any[], typeCodeName: any) { return itemList.map((item: any) => { item.required = requiredList.some((requiredTypeCode) => { return requiredTypeCode === item[typeCodeName]; }); return item; }); }
方法二:如果需要保留async(比如后续要加异步逻辑)
就在调用markRequired的时候用await解析Promise的结果,因为applyRequiredTypes本身已经是async函数,这么做是合法的:
async applyRequiredTypes(objectList: any[], typeCodeName: any, requiredList: any[]) { objectList = objectList || []; requiredList = requiredList || []; // 用await获取Promise内部的数组结果 objectList = await this.markRequired(objectList, requiredList, typeCodeName); ... }
内容的提问来源于stack exchange,提问作者pillar star
相关产品推荐
相关产品推荐

