我试着用下面的承诺。
let promiseArray: [string, Promise<unknown>][] = [];
for(const a of array)
{
const promise = new Promise(() => {this.repository.getRepository<a.entity>.find()});
promiseArray.push([a.entityName, promise]);
}
上面代码的结果是:
result : [
['EntityName', [{},{},{}]],
['EntityName2', [{},{},{}]],
....
]
但是我不知道如何将promiseArray应用于promise.all
。
await Promise.all(promiseArray)
.then((res) => {
console.log(res);
})
.catch((e) => console.error(e));
我尝试了上面的方法,但是没有效果,我尝试了promiseArray.map((pm)=>pm[1])
,但是我无法Mappm[0]
的值。
2条答案
按热度按时间x3naxklr1#
看起来你填充数组的方式不对。从你的代码来看,你使用的是TypeORM,并且
.find()
是异步的(返回一个promise)。因此,你不需要用另一个promise来 Package 它。尝试如下填充数组:然后,您只需执行
.map()
来获取数组中的第二个值,这是.find()
返回的承诺:如果需要将
.entityName
与promise的结果沿着传递,则将每个元素Map到其.find()
promise,然后将实体名称添加到.then()
中的结果,这将为array
中的每个元素创建一个promise,并且可以简单地传递给Promise.all()
:z31licg02#
Promise.all
接受一系列承诺,但你有一系列-你需要用不同的方式来构建承诺的数组-
现在您可以使用
Promise.all
-结果-
这里有一个功能性的例子-
许多人发现使用数组的
map
函数比使用for..of
循环更容易-每个
then
表达式都有一个等价的async..await
表示。这种方法使用较少的嵌套lambda,因此更容易理解。