Неопределенные возвращаемые данные в асинхронной функции - PullRequest
1 голос
/ 16 мая 2019

Я пытаюсь выполнить поиск в БД, а затем вернуть все данные в виде массива, но часть await возвращает неопределенное значение

Я console.logged массив, и он напечатал результаты нормально, но затем за пределамион говорит undefined

async function followUsersIds(user_id) {

    const following = await Follow.find({ "user": user_id })
        .select({ '_id': 0, '__v': 0, 'user': 0 }) //Evitar que traiga esos campos
        .exec((err, follows) => {
            if (err)
                return res.status(500).json({ ok: false, msg: `Error ${err}` })

            let following_clean = [];
            follows.forEach((follow) => {
                following_clean.push(follow.user_followed);
            });

            return following_clean;
        });


    return {
        following
    }
}

и вот вызов:

followUsersIds(user_id)
                    .then((value) => {
                        console.log(value);
                        return res.status(200).json({
                            ok: true,
                            usuarios,
                            users_following: value.following,
                            total: conteo,
                            pages: Math.ceil(conteo / limite)
                        });
                    })
                    .catch(err => { return res.json({ ok: false, msg: `Error ${err}` }) })

НО я не получаю "users_following", и если я утешу журнал "value", он напечатает {следующее:undefined}

1 Ответ

0 голосов
/ 16 мая 2019

Вы смешиваете обратные вызовы и асинхронный / ожидающий синтаксис

это асинхронный / ожидающий синтаксис:

const following = await Follow.find({ "user": user_id })

Это синтаксис обратного вызова:

exec((err, follows) => {

try {
  // We get a Promise object from exec() that we resolve
  // We use a || [] to initialize following with an empty array
  // in case nothing got foung in database
  const following = (await Follow.find({
      user: user_id,
    })
    .select({
      _id: 0,
      __v: 0,
      user: 0,
    })
    .exec()) || [];

  // We build a new array containing only the wanted data
  const following_clean = following.map(x => x.user_followed);

  console.log(following_clean);
} catch (err) {
  // Handle the error
  return res.status(500).json({
    ok: false,
    msg: `Error ${err}`,
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...