【问题标题】:Undefined return data in async function异步函数中未定义的返回数据
【发布时间】:2019-10-03 22:35:54
【问题描述】:

我正在尝试进行数据库搜索,然后将所有数据作为数组返回,但等待部分返回未定义

我已经 console.logged 数组,它打印的结果很好,但在外面显示未定义

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”,如果我在控制台记录“值”,它会打印 { following: undefined }

【问题讨论】:

  • 你使用 followUsersIds 因为这将是一个承诺 followUsersIds(user_id) .then( 。但不是承诺

标签: node.js async-await


【解决方案1】:

你混淆了回调和 async/await 语法

这是异步/等待语法:

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}`,
  });
}

【讨论】:

  • 您好,感谢您的回复,但它仍然返回 undefined { ok: false, msg: 'Error ReferenceError: follow is not defined' } 和 UnhandledPromiseRejectionWarning:
  • hm抱歉复制粘贴错误,一定要有following.map(x => x.user_followed);
猜你喜欢
  • 1970-01-01
  • 2016-05-07
  • 2021-08-01
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
  • 2021-10-03
相关资源
最近更新 更多