控制另一个文件中的异步功能



>我在一个名为feedFactory的文件中调用另一个函数,该函数有一个异步调用,School.findOne,返回一个承诺。因此,以下 get postFields 值为 null,因为它不会等待。如何从调用函数feedFactory.BuildPostBody的文件控制异步流?

const postFields = feedFactory.BuildPostBody(req, res, errorResponse);

而在文件中 feedFactory我有以下代码块,在我执行查询后返回一个承诺。

      exports = module.exports = {
  BuildPostBody: (req, res, errorResponse) => {
    //Determine what account type we are going to post as using field
    //postToFeedAs
    let postFields;
      case "School":
        {
          //Get industry partner name and company logo
          School.findOne({ _id: req.user.school }).then(school => {
              let avatar =
                "https://image.png";
              if (typeof school.profile.school_logo !== "undefined") {
                avatar = school.profile.school_logo.url;
              }
                  postFields = {
                    author: {
                      userType: req.body.postToFeedAs,
                      user: req.user.school,
                      name: school.name,
                      avatar: avatar
                    },
                    postType: "text",
                    postBody: req.body.postBody
                  };
                  console.log("returning post back from factory");
                  return postFields; <--Returns late 
              ...

您可以使用 Async/await 来实现您的目标:

将此代码放入 async 函数中,并更改为:

const postFields = await feedFactory.BuildPostBody(...)

然后当使用postFields

postFields.then(...)