gpt4 book ai didi

node.js - 返回 Try Catch 嵌套异步错误的 Node

转载 作者:太空宇宙 更新时间:2023-11-03 23:19:59 25 4
gpt4 key购买 nike

我创建了一个nodejs/express api,它是另一个api的包装器。

我正在使用 try 和 catch 进行异步调用。我想知道在内部异步调用中如果捕获到错误,该错误是否会被外部异步调用捕获。

transaction.controller 是我的 api,它将 transaction.repository 调用到外部 api。函数 getTransactionResult 在 catch 部分抛出错误。但是,这不会循环回到我的 show 函数的 catch 部分。

router.ts

this.router.get('/:id', this.controller.show.bind(this.controller));

transaction.controller.ts

public async show(req: Request, res: Response): Promise<any> {

const params = req.params;
const token = req.headers.token;

let transaction;

try {
transaction = await this.transactionRepo.getTransactionResult(params.id, token);

console.log("instead carries on here"); // 2

if (transaction.success === false) {
return res.status(404).json({
success: false,
status: 404,
data: transaction,
message: "Failed to retrieve transaction result"
});
}

return res.status(200).json({
success: true,
status: 200,
data: transaction,
message: "Successfully retrieved transaction result"
});

} catch (err) {

//console.log("Does not call this");
return res.status(500).json({
success: false,
status: 400,
data: err,
message: "The server threw an unexpected error",
});
}

transaction.repository.ts

public async getTransactionResult(transactionId: string, token: string) {

const url = this.config.api_url + "/api/transactions/" + transactionId + "/summary";

const options = {
uri: url,
headers: {
'token': token
},
body: {

},
json: true,
resolveWithFullResponse: true
}


let result;
try {

result = await request.get(options);

if (result.statusCode !== 200) {
return { "success": false, data: result }
}

return { "success": true, data: result }

} catch (err) {
console.log("CAUGHT ERROR"); // 1
return err;
}

}

最佳答案

您需要重新抛出错误而不是返回它。

通过执行 return err 你是 resolving Promise 表示异步操作成功。因此,为什么您在 transaction.controller.ts 中的 try-catch 没有捕获任何内容。

或者:

  1. 不要捕获错误并让它冒泡

  2. 重新抛出错误

关于node.js - 返回 Try Catch 嵌套异步错误的 Node ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50965405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com