[英]Wait a Promise to finish in an express function
我在 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 的函數。
表達
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); } }
驗證器.js
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
返回new Promise
還是async
函數? 在async-await
await
等待承諾得到解決。
在此處閱讀有關async-await和promise 的更多信息。
根據您提供的信息,如果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" };
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.