如何在 JavaScript 中的 forEach 中等待承诺?
How to wait for promise in a forEach in JavaScript?
我想从我的 mongodb 集合中检索一个数组,并在将其发送回客户端之前使用它。
我想要的结果如下:
- 从 collection_A
获取数组
- 通过另一个 mongodb 查询
对我刚得到的数组进行所需的工作
- 将数组传回客户端
我当前的代码如下所示:
db.collection("collection")
.find()
.toArray()
.then((arr) => {
arr.forEach(cur => {
db.collection("another-collection")
.count({key: cur.prop})
.then((retrieved) => {
cur.prop = retrieved; //The amount of count one live above
//This part runs later than the res.success below
})
.catch((err: any) => {
//Handle error
});
});
return arr;
})
.then(arr => {
res.success(arr);
})
.catch((err) => {
//Handle error
});
目前,我想对检索到的数组执行的工作发生在 res.success()
之后,因此在客户端上我将获得原始数组。
为什么会这样?
您可以使用 Promise.all
along with Array#map
.
.then((arr) =>
Promise.all(arr.map(cur =>
db.collection("another-collection")
.count({
key: cur.prop
})
.then((retrieved) => {
cur.prop = retrieved;
return curr;
})
.catch((err: any) => {
//Handle error
})
))
)
我想从我的 mongodb 集合中检索一个数组,并在将其发送回客户端之前使用它。 我想要的结果如下:
- 从 collection_A 获取数组
- 通过另一个 mongodb 查询 对我刚得到的数组进行所需的工作
- 将数组传回客户端
我当前的代码如下所示:
db.collection("collection")
.find()
.toArray()
.then((arr) => {
arr.forEach(cur => {
db.collection("another-collection")
.count({key: cur.prop})
.then((retrieved) => {
cur.prop = retrieved; //The amount of count one live above
//This part runs later than the res.success below
})
.catch((err: any) => {
//Handle error
});
});
return arr;
})
.then(arr => {
res.success(arr);
})
.catch((err) => {
//Handle error
});
目前,我想对检索到的数组执行的工作发生在 res.success()
之后,因此在客户端上我将获得原始数组。
为什么会这样?
您可以使用 Promise.all
along with Array#map
.
.then((arr) =>
Promise.all(arr.map(cur =>
db.collection("another-collection")
.count({
key: cur.prop
})
.then((retrieved) => {
cur.prop = retrieved;
return curr;
})
.catch((err: any) => {
//Handle error
})
))
)