如果有未处理的Promise拒绝,Node.js当前仅记录一个错误,并提到将来此类错误将导致进程退出。
对此我有两个问题:
显然有很多方法可以做到这一点,但是我试图找到最干净,最简单的方法,不需要我为此功能创建新的实用程序库。
一些候选人:
runname
-可能会令人困惑,因为没有任何东西表明它来自承诺,而不仅仅是抛出的异常,并且在process.on('unhandledRejection', (err) => { throw err; })
中也不可用。.catch()
答案 0 :(得分:0)
在大多数情况下,当有server
或exit
时,您几乎不希望节点exception
到error
。错误处理程序(try/catch
和.catch()
)的工作就是确保即使存在exception
或error
时,服务器也能正常运行。
相反,当您获得exception
或error
时,您应该:
catch
,其中error
和throw
是具有特定error
消息(以及适合您的error
代码)的自定义error
。 catch
在承诺链(或error
)末尾的自定义app.use(err,...)
并将该error
消息发送给用户。以下是一个简单的伪代码,用户向您提供XML
,并期望将解析后的JSON
作为响应:
function parseXML(xmlStr){
return someParsingLibrary.parseXml2JSON(xmlStr)
.catch(()=>{
throw new Error("Your xml was not valid");
})
}
app.post("/parse", function (req, res, next) {
let xmlStr = req.body.xml;
parseXML(xmlStr)
.then((json)=>{
res.status(200).send({description:"Success", body:json});
})
.catch((err)=>{
res.status(422).send({description:err.message, body:err});
})
});