【发布时间】:2018-11-30 14:26:13
【问题描述】:
我创建了一个 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;
}
}
【问题讨论】:
-
由于您在 getTransactionResult() 的 catch 块中处理错误,因此它不会传播到 show() 内部的外部异步调用。
标签: node.js express asynchronous async-await try-catch