employeeData.js
function getById(id) {
return dbPromise.one(); // using pg-promise
}
employeeService.js
function getInfoById(id) {
return employeeData.getXYZ(id); // purposefully calling a function that does not exist in the employeeData module
}
employeeApi.js //快速路线功能
const getInfoById = (req, res) {
employeeService.getInfoById(123)
.then(response => {
res.json(response);
})
.catch(err => {
res.json(err); // this is not being triggered
});
}
在上面的employeeService
中,我故意错误地输入了函数名称,我认为它应该抛出一个未定义的错误,用于调用getXYZ
中不存在的函数employeeData.js
。但是,employeeApi.js
中的catch块未被调用。
你能告诉我这里可能缺少什么吗?
答案 0 :(得分:2)
我认为它应该抛出一个未定义的错误来调用一个不存在的函数
是的,它确实如此。它抛出一个异常,它不会返回一个promise。因此,没有可以调用then(…).catch(…)
方法的promise对象。
但是,不会调用catch块。
没有catch
块,它只是一个方法调用 - 由于存在异常而不会发生。要抓住它,您需要一个实际的try
/ catch
块。
但这看起来很奇怪,这就是promise-returning functions should never throw的原因。你可以将错误包装在new Promise
执行器中,这会抓住它们,但更简单的选择是使用async
/ await
语法保证总是返回一个promise(如果函数体中有异常,则拒绝它)。
async function getInfoById {
return employeeData.getXYZ(123);
}