承诺在循环完成前解决

时间:2020-10-07 13:35:58

标签: javascript promise async-await sails.js sails-mongo

我有一个包含userId的帖子列表。在获取n个帖子时,我想循环浏览并获取和获取用户数据并将其附加到帖子中。

但是在解决循环之前,该函数将以undefined返回。之后,发布数据会被列出,但我希望首先获取发布数据。

我是诺言和异步的新手。如果我可以使用其他解决方案,请通知我。

我正在使用sailsjs。

fetchPosts: async (req, res) => {

let feeds = [];

posts = await Posts.find({
  skip: offset,
  limit: limit,
  sort: sort,
});
if (posts) {
  /**
   * LOOPING THROUGH FETCHED POST LOOP TO GET
   * USER DATA, LIKE, SHARE, FOLLOW, BOOKMARKS
   */

  const functionWithPromise = (post) => {
    //a function that returns a promise

    console.log(feeds);
    return Promise.resolve(post);
  };

  const anotherAsyncFunction = async (post) => {
    return functionWithPromise(post);
  };

  const getUser = async (userId, post) => {
    return new Promise(async (resolve, reject) => {
      const user = await Account.findOne({ id: userId });
      if (user) {
        post = {
          ...post,
          user: {
            id: user.id,
            uName: user.uName,
            provider: user.provider,
            dpURL: user.dpURL,
            provider: user.provider,
          },
        };

        resolve(post);
      } else {
        reject(null);
      }
    });
  };

  const anAsyncFunction = async (post) => {
    if (post.isAdminPost) {
      post = {
        ...post,
        user: {
          id: "5f3b8bf00dc3f12414b7f773", // this is usedid of admin@dopaminetalks.com in `Admin` model
          uName: "DTOfficial",
          provider: "LOCAL",
          dpURL: "/dpURL/86a73b80-babc-4caa-a84c-762f6e9c1b36.png",
        },
      };
      feeds = [...feeds, post];
      return anotherAsyncFunction(feeds);
    } else {
      getUser(post.userId, post).then((post) => {
        feeds = [...feeds, post];

        return anotherAsyncFunction(feeds);
      });
    }
  };

  const getData = async () => {
    return Promise.all(posts.map((post) => anAsyncFunction(post)));
  };

  getData().then((data) => {
    console.log(data);
    return res.json({
      status: true,
      msg: "Posts Fetched",
      data: data,
    });
  });
}
},

0 个答案:

没有答案