Невозможно сохранить данные из цикла в Javascript [duplicate]

wzwd спросил: 13 июня 2018 в 02:40 в: javascript

У этого вопроса уже есть ответ:

  • How do I return the response from an asynchronous call? 31 ответ
  • Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference 6 ответов
  • Using async/await with a forEach loop 12 ответов

Я хочу использовать forEach (JavaScript в узле js) для получения значений, а затем сохранить их как массив. Но после окончания цикла мой массив пуст или он не сохраняется. Я не знаю причину проблемы, любая помощь пожалуйста.

Form1.find({}, function(err, alluser) {
  if (err) {
    res.redirect("back");
  } else {
    var usernames = []; // I want to store the values here
    alluser.forEach(function(getuserid) {
      var userids = getuserid.userid;
      User.findById(userids, function(err, getnames) {
        if (err) {
          var nameitself = userids;
          usernames.push(nameitself);
        } else {
          var firstname = getnames.firstName;
          usernames.push(firstname);
          console.log(usernames); // this returns the stored values at each iterations 
        }
      });
    })
    console.log(usernames); // here I want the values but is empty [], I don't know the problem
    res.send(usernames) // this also sends empty array
  }
});

1 ответ

Arghya Saha ответил: 13 июня 2018 в 02:49

Проблема заключается в том, что вы думаете об этом коде в терминах синхронной работы, то есть при выполнении строки за строкой.

Но в действительности следующая строка обращается к db, поэтому возвращает обратный вызов

User.findById (userids, function (err, getnames)

wzwd ответил: 14 июня 2018 в 05:13
Не могли бы вы показать, как я могу использовать асинхронный метод для этой проблемы ?. У меня много кодов с аналогичной проблемой. Если бы вы могли помочь мне решить эту проблему, я могу легко понять асинхронность и решить мою проблему. Я читаю об асинхронной работе, но я этого не понимал.

Дополнительное видео по вопросу: Невозможно сохранить данные из цикла в Javascript [duplicate]

Цикл While JavaScript. JS для начинающих

Уроки JavaScript | #7 - Циклы while, for

Про цикл событий в JavaScript или "как на самом деле работает асинхронность"?