Javascript更改为变量内部。然后在外面找不到

时间:2018-04-04 06:33:58

标签: javascript callback promise

以下是我正在尝试执行的代码。

如评论中所述。我试图让数组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);
});

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

使用.then(或await),但实施起来并不难:

const allPromises = array2.map(item => getObject(item.id));
Promise.all(allPromises).then(allObjects => {
  // do something with all objects
});