Javascript 等待承诺在express函数中完成

Javascript 等待承诺在express函数中完成,javascript,express,asynchronous,promise,axios,Javascript,Express,Asynchronous,Promise,Axios,我在Express中有一个post调用需要验证,因此我创建了一个名为“validator.js”的javascript文件,在继续之前检查传递的值。“validator.js”中的一个方法需要执行axios调用,但在完全填充数据之前显然需要时间。所以我用async/await解决了这个问题 router.post("/add_to_favorites", passport.authenticate("local"), async(req, res) => { let valida

我在Express中有一个post调用需要验证,因此我创建了一个名为“validator.js”的javascript文件,在继续之前检查传递的值。“validator.js”中的一个方法需要执行axios调用,但在完全填充数据之前显然需要时间。所以我用async/await解决了这个问题

router.post("/add_to_favorites", passport.authenticate("local"), async(req, res) => 
    { let validation = await validateMedia(req.body);

if (validation.error) {
    return res.status(400).json(validation.message);
   }
“validateMedia”是调用validator.js的函数。
考虑到以下代码,处理此axios异步调用的最佳方法是什么?

Express

router.post("/add_to_favorites", passport.authenticate("local"), (req, res) => 
    { let validation = validateMedia(req.body);
if (validation.error) {
    return res.status(400).json(validation.message);
  }
}
const validateMedia = data => {
  if (data.mediaType !== "movie" && data.mediaType !== "serie") {
    return {
      error: true,
      message: "Media type is not valid"
    };
  }

  if (data.mediaType === "movie") {
    axios.get(`/${data.mediaType}/${data.mediaId}`).then(response => {
      if (data.mediaTitle === response.data.title) {
        return { error: false, message: "Success" };
      }
      return { error: true, message: "Failed" };
    });
  }
return { error: false, message: "Checked values" };
}
validator.js

router.post("/add_to_favorites", passport.authenticate("local"), (req, res) => 
    { let validation = validateMedia(req.body);
if (validation.error) {
    return res.status(400).json(validation.message);
  }
}
const validateMedia = data => {
  if (data.mediaType !== "movie" && data.mediaType !== "serie") {
    return {
      error: true,
      message: "Media type is not valid"
    };
  }

  if (data.mediaType === "movie") {
    axios.get(`/${data.mediaType}/${data.mediaId}`).then(response => {
      if (data.mediaTitle === response.data.title) {
        return { error: false, message: "Success" };
      }
      return { error: true, message: "Failed" };
    });
  }
return { error: false, message: "Checked values" };
}

您共享了有限的信息。需要了解如何定义
validateMedia
它是使用
new Promise
返回承诺,还是一个
async
函数?在
异步等待
等待
等待承诺得到解决

阅读更多关于和的信息

根据您提供的信息,如果
validateMedia
功能类似于:

承诺:

function validateMedia(data) {
  // Using promise here
  return new Promise ( (resolve, reject) => {
    if (data.mediaType !== "movie" && data.mediaType !== "serie") {
      return resolve({    // Call resolve function to return success
        error: true,
        message: "Media type is not valid"
      });
    }

    if (data.mediaType === "movie") {
      // This is the function needs to wait for.
      axios.get(`/${data.mediaType}/${data.mediaId}`).then(response => {
        if (data.mediaTitle === response.data.title) {
          // Call resolve function to return success
          return resolve({ error: false, message: "Success" });
        }
        // Call reject function to return error
        return reject({ error: true, message: "Failed" });
      });
    }
  });
}
使用异步等待:

async function validateMedia(data) {

  if (data.mediaType !== "movie" && data.mediaType !== "serie") {
      return {
        error: true,
        message: "Media type is not valid"
      };
  }

  if (data.mediaType === "movie") {
      try {
          // This is the function needs to wait for. if axios.get() returns a promise
          let response = await axios.get(`/${data.mediaType}/${data.mediaId}`);

          if (data.mediaTitle === response.data.title) {
              return { error: false, message: "Success" };
          }
          return { error: true, message: "Failed" };
      }
      // If axios.get() throws error or rejects promise
      catch (err) {
          return { error: true, message: "Failed" };
      }
  }
}

这样,我不应该被限制在router.post中的异步函数中包装(req,res)吗?因为我刚刚对它进行了测试,并且只对“async(req,res)”和“wait validateMedia(req.body)”起作用。validateMedia函数只返回一个带有“error”和“message”的对象(我已经编辑了我的问题)。很抱歉信息有限,我试图避免复制/粘贴所有代码,但您请求的信息实际上很有用。