为了账号安全,请及时绑定邮箱和手机立即绑定

在 foreach 循环中调用异步函数并在循环完成后返回数组

在 foreach 循环中调用异步函数并在循环完成后返回数组

慕丝7291255 2022-12-02 17:24:00
我试图在 foreach 循环中从 API 请求数据并将该数据推送到一个数组,然后在最后返回该数组。这是我的代码:db            .collection('posts')            .orderBy('createdAt', 'desc')            .limit(10)            .get()            .then((data) => {                let posts = [];                data.forEach((doc) => {                    db                        .doc(`/users/${doc.data().userHandle}`)                        .get()                        .then((userDoc) => {                            posts.push({                                postId: doc.data().id,                                userHandle: doc.data().userHandle,                                userImageUrl: userDoc.data().imageUrl,                                imageUrl: doc.data().imageUrl,                            });                        })                })                return res.json(posts);            })            .catch((err) => {                console.error(err);                res.status(500).json({ error: err.code});            });由此,posts 数组返回空数组或对象,即使我将 return res.json(posts) 替换为.then(() => {return res.json(posts);})任何帮助都很棒!!!
查看完整描述

1 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

该数组为空,因为在发送响应时,带有帖子的承诺仍在等待解决。


为了解决这个问题,您可以使用 收集数组中的所有承诺.map(),等待它们在 的帮助下解决,Promise.all()然后发送响应:


db

  .collection('posts')

  .orderBy('createdAt', 'desc')

  .limit(10)

  .get()

  .then((data) => {

    const promises = data.map((doc) => {

      return db

        .doc(`/users/${doc.data().userHandle}`)

        .get()

        .then((userDoc) => {

          return {

            postId: doc.data().id,

            userHandle: doc.data().userHandle,

            userImageUrl: userDoc.data().imageUrl,

            imageUrl: doc.data().imageUrl,

          };

        })

    });

    Promise.all(promises).then(posts => {

      res.json(posts);

    })

  })

  .catch((err) => {

    console.error(err);

    res.status(500).json({ error: err.code});

  });


查看完整回答
反对 回复 2022-12-02
  • 1 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信