以下是我正在尝试执行的代码。
如评论中所述。我试图让数组1的更新在.then()函数之外可见。
有人可以帮我理解为什么会这样吗?以及如何在.then()函数之外看到它?
非常感谢!
var array1 = [];
array2.forEach(function(item) {
// this is an async all to db.collection.findOne({_id: item.id});
object = getObject(item.id);
object.then(function(object) {
array1.push(object);
//if I print console.log(array1) here, I can see it getting updated
});
});
// this does not print anything
console.log(array1)
*** EDIT
虽然这是现有问题的重复, 我能够通过下面提供的示例来解决问题
var array1 = [];
objectPromises = array2.map(item => function(item));
Promise.all(objectPromises).then(objects -> {
objects.forEach(function(object){
array1.push(object);
});
console.log(array1);
});
感谢您的帮助!
答案 0 :(得分:1)
您 使用.then
(或await
),但实施起来并不难:
const allPromises = array2.map(item => getObject(item.id));
Promise.all(allPromises).then(allObjects => {
// do something with all objects
});