[英]Unhandled promise rejection when trying to throw error in async function
[英]Unhandled promise rejection for async function
我的快递后端收到未处理的承诺拒绝警告。 我不完全确定如何解决这个问题,因为我以前从未使用过 Express。
//run function
function run(TrainLine, StartStation, EndStation,ArrivalTime,ArrivalDate) {
return new Promise((resolve, reject) => {
var process = spawn('python3',["./python/main.py",
TrainLine,
StartStation,
EndStation,
ArrivalTime,
ArrivalDate
] );
const out = []
process.stdout.on(
'data',
(data) => {
out.push(data.toString());
logOutput('stdout')(data);
}
);
const err = []
process.stderr.on(
'data',
(data) => {
err.push(data.toString());
logOutput('stderr')(data);
}
);
process.on('exit', (code, signal) => {
logOutput('exit')(`${code} (${signal})`)
if (code !== 0) {
reject(new Error(err.join('\n')))
return
}
try {
resolve(JSON.parse(out[0]));
} catch(e) {
next(e);
}
});
});
}
app.post('/commuterequest',async function(request,response){
console.log(request.body);
const outputjson =await run(request.body.TrainLine,request.body.StartStation, request.body.EndStation, request.body.ArrivalTime, request.body.ArrivalDate);
console.log(outputjson);
response.json(outputjson);
});
app.get('/express_backend', (req, res) => {
res.send({ express: 'connected to backend!' });
});
这是我定义的运行函数代码。 我正在尝试将 try catch 添加到原始的 await 函数中。 鉴于代码的语法,我不太确定如何做到这一点。
完整的错误信息
UnhandledPromiseRejectionWarning:未处理的承诺拒绝。 这个错误要么是因为在没有 catch 块的情况下抛出了异步函数,要么是因为拒绝了一个没有用 .catch() 处理过的承诺。 (rejection id: 4) TypeError: 无法读取 C:\\Users\\mokas\\Downloads\\MTA_Crunch\\server.js:62:49 at Layer.handle [as handle_request] (C:\\Users\\mokas \\Downloads\\MTA_Crunch\\node_modules\\express\\lib\\router\\layer.js:95:5) 在下一个 (C:\\Users\\mokas\\Downloads\\MTA_Crunch\\node_modules\\express\\lib\\router\\route.js:137:13 ) 在 Route.dispatch (C:\\Users\\mokas\\Downloads\\MTA_Crunch\\node_modules\\express\\lib\\router\\route.js:112:3) 在 Layer.handle [as handle_request] (C:\\Users\\mokas\\Downloads \\MTA_Crunch\\node_modules\\express\\lib\\router\\layer.js:95:5) 在 C:\\Users\\mokas\\Downloads\\MTA_Crunch\\node_modules\\express\\lib\\router\\index.js:281:22 在 Function.process_params (C:\\Users\\mokas\\Downloads\\MTA_Crunch\\node_modules\\express\\lib\\router\\index.js:335:12) 在下一个 (C:\\Users\\mokas\\Downloads\\MTA_Crunch\\node_modules\\express\\lib\\router\\ index.js:275:10) 在 expressInit (C:\\Users\\mokas\\Downloads\\MTA_Crunch\\node_modules\\express\\lib\\middleware\\init.js:40:5) 在 Layer.handle [as handle_request] ( C:\\Users\\mokas\\Downloads\\MTA_Crunch\\node_modules\\express\\lib\\router\\layer.js:95:5)
Express
路由处理程序有 3 个参数。 第三个参数是可选参数,其作用是处理异步处理程序的拒绝错误。 所以你需要向它传递一个被拒绝的错误。
app.post('/commuterequest',async function(request,response, next){
console.log(request.body);
try {
const outputjson =await run(request.body.TrainLine,request.body.StartStation, request.body.EndStation, request.body.ArrivalTime, request.body.ArrivalDate);
console.log(outputjson);
response.json(outputjson);
} catch (e) {
next(e);
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.