这里有几件事不对。
首先,你没有把承诺强加给你的朋友
promises
变量。你在推我
myMetaMember
数组中的变量。
第二,如果您已经在用序列化异步请求
await
,您不需要使用
Promise.all()
完全。
第三,当您不需要这样做时,通过将现有的承诺包装到手动创建的承诺的附加层中,您使用了几种反模式。
第四,你一般不想混在一起
等待
.then()
和
.catch()
. 从中捕捉错误
,使用
try/catch
. 没有必要这样做
。然后()
因为
已经为你得到了价值。
第五,
getResolvePromise()
似乎做不了什么有用的事。它叫
Promise.all([target])
然后返回一个承诺
target
myArray
是一系列的承诺,每一个结果都指向一个对象,以下是我对你所做的最好的解释:
private populateRequest(connection: Connection, myArray: any[], containerId: string): Promise<Array<{ContainerId: string; ContentEntityId: unknown; Body: unknown; Metadata: {prop3: unknown; status: string}}>> {
return Promise.all(myArray).then(results => {
return results.map(data => {
let status = '';
if (this.flags.hasOwnProperty('prop1')) {
status = 'Active';
} else if (this.flags.hasOwnProperty('prop2')) {
status = 'Inactive';
} else if (data[0]['WidgetProp1'] === 'Active') {
status = 'Inactive';
} else if (data[0]['WidgetProp1'] === 'Inactive') {
status = 'Active';
}
const myMetaObj = {
prop3: data[0]['WidgetProp3'],
status
};
const myMetaMember = {
ContainerId: containerId,
ContentEntityId: data[0]['WidgetId'],
Body: data[0]['WidgetBody'],
Metadata: myMetaObj
};
return myMetaMember;
});
});
}
我的数组
(您所说的是一个数组或承诺,每个解析到一个对象,您将使用
Promise.all(myArray)
. 这将返回一个单独的承诺,该承诺将解析为一个结果数组,然后您可以使用该数组
。然后()
获取结果数组。然后可以迭代该数组,以基于它们的数据构建新对象。
真的是一系列的承诺,那么你不应该把它说成
myArray: any[]