承诺没有工作

时间:2018-05-21 20:26:54

标签: javascript promise try-catch

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块未被调用。

你能告诉我这里可能缺少什么吗?

1 个答案:

答案 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);
}