我有一个异步函数:
public async postSomething(something: any): Promise<any> {
try {
const query: string = 'INSERT INTO table VALUES stuff';
return await database.one(query);
} catch (error) {
throw new Error(`Error posting request: ${error}`);
}
}
我认为这应该可以正常工作,但是当我调用该方法时,它成功运行并返回 200,但我仍然收到错误“UnhandledPromiseRejectionWarning” - 源自在没有 catch 块的异步函数内部抛出,或者通过拒绝未使用 .catch() 处理的承诺...
我不完全确定我在这里做错了什么,任何帮助将不胜感激。
答案 0 :(得分:0)
在异步函数中,throw
错误会导致函数返回的 Promise 被拒绝。
在您的 catch
中,虽然您在 database.one
Promise 拒绝时正确捕获了它,但通过重新抛出错误,您会导致 postSomething
返回的 Promise 被拒绝。
.catch
的调用方中的任意一个 postSomething
:
postSomething()
.catch((error) => {
res.status(500).send(error.message);
});
或者不要重新输入 postSomething
:
public async postSomething(something: any): Promise<any> {
try {
const query: string = 'INSERT INTO table VALUES stuff';
return await database.one(query);
} catch (error) {
console.log(`Error posting request: ${error}`);
}
}