Массив не видно за пределами функции

160
24 марта 2019, 17:50

Собираю данные в массив из MongoDB:

  let part = []
  const crosses = []
  codes.forEach(async c => {
    part = await Crosses.find({
      $or: [{
        number1: c.code,
        brand1: c.brand
      }, {
        number2: c.code,
        brand2: c.brand
      }]
    })
    for (let i = 0; i < part.length; i++) {
      crosses.push(part[i])
    }
  })

После этой функции forEach массив crosses пуст, но если я делаю console.log(crosses) сразу после цикла for, там есть данные - то есть, все работает как надо. Как вытащить этот массив наружу функции?

Answer 1

Операции то у вас асинхронные, все это дело лучше обернуть в Promise.all:

const crosses = [];
await Promise.all(codes.map(async (code) => {
    part = await Crosses.find({
        $or: [{
            number1: c.code,
            brand1: c.brand
        }, {
            number2: c.code,
            brand2: c.brand
        }]
    });
    for (let i = 0; i < part.length; i++) {
        crosses.push(part[i])
    }
}));
console.log(crosses);

Или без await:

const crosses = [];
Promise.all(codes.map(async (code) => {
    part = await Crosses.find({
        $or: [{
            number1: c.code,
            brand1: c.brand
        }, {
            number2: c.code,
            brand2: c.brand
        }]
    });
    for (let i = 0; i < part.length; i++) {
        crosses.push(part[i])
    }
})).then(() => {
    console.log(crosses);
});
READ ALSO
requestAnimationFrame vs settimeout 0 для анимации display:none

requestAnimationFrame vs settimeout 0 для анимации display:none

Пытаюсь сделать анимационные переходы как во Vuejs для блока с display:none

163
Как сделать такой Range Slider?

Как сделать такой Range Slider?

Как можно сделать такой слайдер? второй день голову ломаю, помогите плиз, мб есть готовые плагины какие-тоКовырял jqueryUI и noUiSlider но так и не победил...

153
как убрать скачек экрана вверх при клике на ссылку?

как убрать скачек экрана вверх при клике на ссылку?

Есть такой кусок кодаЭто табы, и при клике по переключателю страничка подпрыгивает, я допер почему она подпрыгивает, из-за значка #, так вот...

151
Как может выглядеть Ajax отправка формы без jQuery?

Как может выглядеть Ajax отправка формы без jQuery?

Есть типовой скрипт отправки писем на jQuery HTML:

158