我的情況是我有一個多次呼叫一個函式的 POST 路由。如果被呼叫的函式回傳錯誤,我希望請求回傳錯誤,但我不確定如何實作這一點。看這張圖片:

這是我的代碼:
function POSTcord(lat, lng) {
axios
.post(process.env.SOS_POST_URL process.env.SOS_POST_CODE, {
batteryLevel: 100,
longitude: lng,
latitude: lat
})
.then(res => {
console.log(`statusCode: ${res.status}`)
})
.catch(error => {
console.error(error.message);
})
}
router.post('/test', async (req, res) => {
let passedCords = req.body;
try {
for (const cord of passedCords) {
POSTcord(cord.lat, cord.lng);
}
res.status(200).json({status:"success", message: "hello!"});
} catch (err) {
console.error(err.message);
res.status(500).send("Server error");
}
});
/test如果函式POSTcord在回圈中的某處捕獲錯誤,我希望路由回傳錯誤。對此有何想法?我想我可以傳遞res給POSTcord函式,但這沒有用。感謝任何輸入:)
uj5u.com熱心網友回復:
您需要回傳Promise 并確保拋出/拒絕錯誤:
要么這樣做:
function POSTcord(lat, lng) {
return axios // <--------------- THIS IS VERY IMPORTANT
.post(process.env.SOS_POST_URL process.env.SOS_POST_CODE, {
batteryLevel: 100,
longitude: lng,
latitude: lat
})
.then(res => {
console.log(`statusCode: ${res.status}`)
})
.catch(error => {
console.error(error.message);
throw error; // <----------- ALSO DO THIS
})
}
或者這樣做:
function POSTcord(lat, lng) {
return axios // <--------------- THIS IS VERY IMPORTANT
.post(process.env.SOS_POST_URL process.env.SOS_POST_CODE, {
batteryLevel: 100,
longitude: lng,
latitude: lat
})
.then(res => {
console.log(`statusCode: ${res.status}`)
})
// DON'T CATCH THE ERROR!!
}
然后你需要做的就是await得到錯誤:
router.post('/test', async (req, res) => {
let passedCords = req.body;
try {
for (const cord of passedCords) {
await POSTcord(cord.lat, cord.lng); // DO THIS FOR CATCH TO WORK
}
res.status(200).json({status:"success", message: "hello!"});
} catch (err) {
console.error(err.message);
res.status(500).send("Server error");
}
});
如果要POSTcord()并行呼叫,可以await使用Promise.all():
router.post('/test', async (req, res) => {
let passedCords = req.body;
try {
let promises = [];
for (const cord of passedCords) {
let p = POSTcord(cord.lat, cord.lng);
promises.push(p);
}
await Promise.all(promises); // DO THIS FOR CATCH TO WORK
res.status(200).json({status:"success", message: "hello!"});
} catch (err) {
console.error(err.message);
res.status(500).send("Server error");
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/356422.html
標籤:javascript 节点.js 表达 for 循环
上一篇:如何在撇號內插入EJS標簽?
