Синхронизация запросов Loda sh и mon goose в nodejs - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь выполнить sh синхронизацию в пн goose запрос внутри функции _.each loda sh, как это -

            let commentContainer = [];
            let comments = {..} //json object having comments
             _.each(comments, comment => {
                User.findOne({_id: comment.createdBy}).exec()
                .then(function(commentor){
                    var c = {
                        text: comment.text,
                        votes: comment.votes.length,
                        commentor: {
                            name: commentor.name,
                            profilePhoto: commentor.profilePhoto,
                            id: commentor._id

                        }
                    }
                    commentContainer.push(c);
                });
            });
            }
            console.log(commentContainer); //it shows []

Как мне этого добиться, я попытался с помощью setTimeout Функция дает задержку, но это не кажется действительной процедурой.

Ответы [ 2 ]

1 голос
/ 20 января 2020

измените ваш код следующим образом:

let fun = async() => {
  let commentContainer = [];
  let comments = {..} //json object having comments
  await _.each(comments, comment => {
    User.findOne({_id: comment.createdBy}).exec()
    .then(function(commentor){
        var c = {
            text: comment.text,
            votes: comment.votes.length,
            commentor: {
                name: commentor.name,
                profilePhoto: commentor.profilePhoto,
                id: commentor._id

            }
        }
        commentContainer.push(c);
    });
  });
  }
  console.log(commentContainer); //it shows []
}

сделайте вашу функцию асинхронной c и используйте await keywoed, когда вам нужно дождаться завершения процесса перед следующей итерацией

0 голосов
/ 20 января 2020

Это потому, что Node.js является асинхронным. Вы должны использовать async / await или обещание или обратный вызов, когда вы имеете дело с неблокирующим вызовом, таким как DB-вызов или вызов клиента Http.

      let comments = {..} //json object having comments
      console.log(findUSer(comments)); // print result


      async function findUSer(comments){
        let commentContainer = [];
         await _.each(comments, comment => {
            User.findOne({_id: comment.createdBy}).exec()
            .then(function(commentor){
                var c = {
                    text: comment.text,
                    votes: comment.votes.length,
                    commentor: {
                        name: commentor.name,
                        profilePhoto: commentor.profilePhoto,
                        id: commentor._id

                    }
                }
                commentContainer.push(c);
            });
        });
        }
         return commentContainer;
       }
...