Почему изменения, внесенные в глобальную переменную в обратном вызове функции foreach, не отражают прекращение обратного вызова - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь получить некоторые документы из атласа mongoDB, ниже приведен код:

get('/:page/bucket_names', (req, res) => {
    var page = req.params.page;
    var pageBuckets = [];
    MongoClient.connect(uri, (err, client) => {
        if (err) res.send('error:' + err);
        const db = client.db("cms");
        db.collection(page).find({ $or: [{ type: 'single' }, { type: 'carousel' }, { type: 'freelist' }] }, (err, result) => {
            if (err) res.send('error');
            else {
                result.forEach(el => {
                    pageBuckets.push(el);
                    console.log(pageBuckets) //1
                })
                console.log(pageBuckets)  //2
            }
        })
        client.close();
    })
})

Первый console.log выводит обновленный массив pageBuckets, а второй console.log выводит пустой массив.Я не могу понять, в чем проблема.

1 Ответ

0 голосов
/ 01 февраля 2019

Оказывается, что 2nd console.log выполнялся до цикла foreach, поэтому исправьте его с помощью следующего кода:

result.forEach(el =>{
        pageBuckets.push(el);
          console.log(pageBuckets) //1
      }).then(() =>{
        console.log(pageBuckets); //2
      })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...