Вернуть переменную после запуска forEach - PullRequest
0 голосов
/ 04 июня 2018

Я только недавно попробовал выучить nodejs, я выбрал инфраструктуру adonisjs, потому что я думаю, что мне будет легче учиться, потому что в двух словах есть некоторые сходства с laravel, который я использовал для кодирования.

но теперь у меня есть некоторые проблемы, я не могу решить, у меня есть такая функция:

  async getAllPeople() {
    let allPeople = await People.all()
    let myArray = []
    let checkChild = async (people) => {
      let eachPeopleChild = await people.children().fetch()
      if (eachPeopleChild.rows.length > 0) {
        return people
      }
      return false
    }
    allPeople.rows.forEach(async (people) => {
      let res = await checkChild(people)
      if (res !== false) {
        myArray.push(res)
      }
    })
    console.log(myArray)
  }

, когда я запускаю эту функцию, это показывает пустой массив [], я знаю, из-за nodejs илиJS на самом деле имеет асинхронное поведение, он запускает это: console.log(myArray) first

что я ожидал, как выполнить, или вернуть myArray после того, как весь цикл или другой процесс выполнен?

- проблема в том, как я зацикливаю массив, а не как я сделал обратный вызов, обещание, потому что я уже использую async - await, который возвращает обещание и его поведение.map или forEach не позволяет то, что я ожидал ... и решение ясно: for ( item of items )

спасибо

1 Ответ

0 голосов
/ 05 июня 2018

На самом деле я только что нашел решение, спасибо парню в другом месте, который сказал мне, что я не могу использовать forEach и просто использовать for (let item of anArray) вместо этого.вот мой код сейчас:

  async getAllPeople() {
    let allPeople = await People.all()
    let myArray = []
    let checkChild = async (people) => {
      let eachPeopleChild = await people.children().fetch()
      if (eachPeopleChild.rows.length > 0) {
        return people
      }
      return false
    }

    for (let people of allPeople.rows) {
      let res = await checkChild(people)
      if (res !== false) {
        myArray.push(res)
      }
    }
    return myArray
  }

теперь все работает .. !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...