为什么我的异步函数返回一个空数组

扎卡里亚·拉法尔(Zakaria Lafhal)

因此,我试图通过将用户的匹配项推入数组并返回该数组来获取用户的匹配项,以便我的路由器可以将数据发送至前端。但是我的异步函数有问题,我只是有一个空数组。我尝试设置一些断点,并注意到我的路由器在服务将数据推送到阵列之前发送了数据。

有我的路由器代码:

router.get("/allMatchs", auth, async (req, res) => {
  const user = await userService.getUserById(req);
  const matchs = await service.getMatchsByUser(user);
  res.send(matchs);
});

还有我的服务代码:

async function getMatchsByUser(user) {
  const userMatchs = user.matchs;
  let matchs;
  await userMatchs.map(async (m) => {
    let match = await Match.findById(m._id).select([
      "-isConfirmed",
      "-isUnmatched",
    ]);
    matchs.push(match);
  });
  return matchs;
}

感谢您的帮助。

谭达

这段代码

userMatchs.map(async (m) => {
    let match = await Match.findById(m._id).select([
      "-isConfirmed",
      "-isUnmatched",
    ]);
    matchs.push(match);
  }); // -> return an array of promises

它返回一个promise数组,所以await不会等待它执行,->返回空数组。

为此,您应该使用Promise.all()

像这样:

async function getMatchsByUser(user) {
  const userMatchs = user.matchs;
  let matches = await Promise.all(userMatchs.map(async (m) => {
    return Match.findById(m._id).select([
      "-isConfirmed",
      "-isUnmatched",
    ]);
  }));
  return matches;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的函数返回一个空数组?

为什么这个函数返回一个空数组?

我在一个函数中有一个本地字符数组——当我返回数组名称时,为什么返回值是空的?

为什么我要在一个空数组上调用GetType()但不能从函数返回它时调用

为什么我的异步函数返回一个 Future<int> 在等待每个时停顿?

为什么我第一次使用异步它将给我一个空数组?

为什么我的函数不断返回一个空列表?

为什么我的递归函数返回一个空列表?

为什么我的reducer在react / redux中返回一个空数组?

为什么我的 ipcMain 在读取数据库后返回一个空数组?

为什么slice返回一个空数组?

为什么我的getElementsByTagName返回一个空的NodeList?

为什么我的 Flask 函数不会返回一个 JSONified 数组?

为什么我的函数只返回数组中的第一个对象

为什么我的函数返回一个未定义的数组作为项目?

为什么我的方法返回一个null数组?

如果我附加到函数内的全局数组,为什么要从函数返回一个项目?

为什么从sqlite返回值会返回一个空数组

为什么一个函数在调用另一个异步函数时是异步的?

为什么过滤具有多个条件的对象数组会返回一个空数组?

PowerShell - 为什么在 Hashtable 中查找数组会返回一个空数组?

为什么我仍然有警告:期望在云函数中的异步箭头函数结束时返回一个值,即使我已经返回了一个承诺?

为什么这个简单的过滤器返回一个空数组?

为什么mongoose.find返回一个空数组

为什么此get_pages返回一个空数组?

为什么此递归分区算法返回一个空数组?

为什么IJavaProject.findPackageFragmentRoots返回一个空数组?

为什么领事健康检查会返回一个空数组?

为什么在日期对象上调用 Object.getOwnPropertyDescriptors 会返回一个空数组?