Ожидание нескольких вызовов базы данных - PullRequest
0 голосов
/ 26 апреля 2018

Не удается обернуть цикл в обещание

Мне нужно создать массив пользователей, прежде чем я отобразлю свою страницу, но я не могу понять, как обернуть вызовы из моей базы данных

Спасибозаранее.

router.get('/friends', auth.isLogged(), (req, res) => {
    let friendsList = [];

    User.findById(req.user._id,
        {
            friends: 1,
        },
        (err, user) => {
            user.friends.map(friend => {
                User.findById(friend._id).then(doc => {
                    friendsList.push(doc);
                });
            });
            console.log(friendsList); <-- gets called before the loop is done
        });
});

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Превратите friends в массив обещаний и подождите Promise.all по всем из них, например:

router.get('/friends', auth.isLogged(), (req, res) => {
  let friendsList = [];
  User.findById(req.user._id, {
      friends: 1,
    },
    async (err, user) => {
      const friendsList = await Promise.all(
        user.friends.map(({ _id }) => User.findById(_id))
      );
      console.log(friendsList);
    }
  );
});
0 голосов
/ 26 апреля 2018

заверните в Promise.all():

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

Promise.all() не разрешится, пока не будут выполнены все обещания или одно из них я отклонил.

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