Javascript 使用try-and-catch异步方法的正确方法是什么?
我有来自客户端的请求,我可以在try和catch之前打印request.body,但它没有进入try块,从而停止所有底层链接的实现,任何关于实现错误的想法我花了数小时在这方面都找不到问题 梅因酒店Javascript 使用try-and-catch异步方法的正确方法是什么?,javascript,typescript,promise,try-catch,Javascript,Typescript,Promise,Try Catch,我有来自客户端的请求,我可以在try和catch之前打印request.body,但它没有进入try块,从而停止所有底层链接的实现,任何关于实现错误的想法我花了数小时在这方面都找不到问题 梅因酒店 export class OrderController extends Controller { private _request: IRequestURL[] = []; constructor() { super(); } public as
export class OrderController extends Controller {
private _request: IRequestURL[] = [];
constructor() {
super();
}
public async processOrderSummary(@Request() request: ExpressRequest,
response: ExpressResponse) {
console.log("OrderCOntroll>>>>>>>", request.body);
try {
const data = await this.processOrderSummaryRequest(request);
if (!_.isEmpty(data)) {
response.send(data);
}
} catch (err) {
response.send(err);
console.log("ERR_POS", err);
}
}
private async processOrderSummaryRequest(request: ExpressRequest): Promise < any > {
const bRetSpecialty: boolean = await this.specialtyOrderSummaryRequest(request);
const bRetPBM: boolean = await this.pmbOrderSummaryRequest(request);
if (!bRetPBM && !bRetSpecialty) {
return Promise.reject(new Error("Processing failed"));
}
const __data: IResponse = await makeRequest(this._request);
if (__data.Headers.StatusCode !== REQUEST_SUCCESS_STATUS_CODE) {
// some proecessing
// check to see which request failed
if (!_.isEmpty(__data.Headers.IndexOfRequestThatFailed)) {
// some other processing
}
}
let data = await this.specialtyprocessOrderSummaryResponse(__data.Details[0]);
data += await this.pbmprocessOrderSummaryResponse(__data.Details[1]);
return data;
}
@Post('getOrderSummary')
private async specialtyOrderSummaryRequest(@Body() request: ExpressRequest): Promise < boolean > {
return new Promise < boolean > ((resolve) => {
const specialtyUrl = urlConfig.specialtyBaseUrl + urlConfig.specialtyRoute + "Order/getOrderSummary";
const reqObject: IRequestURL = {}
as IRequestURL;
reqObject.url = specialtyUrl;
reqObject.body = request.body;
return resolve(true);
});
}
导出类OrderController扩展控制器{
私有_请求:IRequestURL[]=[];
构造函数(){
超级();
}
公共异步processOrderSummary(@Request()请求:ExpressRequest,
回复:ExpressResponse){
log(“OrderCOntroll>>>>>>”,request.body);
试一试{
const data=wait this.processOrderSummaryRequest(请求);
如果(!\ isEmpty(数据)){
响应。发送(数据);
}
}捕捉(错误){
响应。发送(错误);
日志(“ERR_POS”,ERR);
}
}
私有异步进程OrderSummaryRequest(请求:ExpressRequest):Promise{
const-bRetSpecialty:boolean=等待此.specialTorDerSummaryRequest(请求);
const bRetPBM:boolean=wait this.pmbOrderSummaryRequest(请求);
如果(!bRetPBM&&!bRetSpecialty){
返回承诺。拒绝(新错误(“处理失败”));
}
常量数据:IResponse=等待makeRequest(此.\u请求);
if(_udata.Headers.StatusCode!==请求_u成功_u状态_u代码){
//一些处理
//检查哪个请求失败
if(!\u.isEmpty(\u data.Headers.indexoferequestthatfiled)){
//其他一些处理
}
}
让data=wait this.specialtyprocessOrderSummaryResponse(_data.Details[0]);
data+=等待这个.pbmprocessOrderSummaryResponse(uu data.Details[1]);
返回数据;
}
@Post('getOrderSummary')
专用异步SpecialTorDerSummaryRequest(@Body()请求:ExpressRequest):承诺{
返回新承诺((解析)=>{
const specialtyUrl=urlConfig.specialtyBaseUrl+urlConfig.specialtyrute+“订单/getOrderSummary”;
const reqObject:IRequestURL={}
如艾瑞克斯图尔;
reqObject.url=specialtyUrl;
reqObject.body=request.body;
返回resolve(true);
});
}
如果数据
为空,则它根本不会返回。而不是返回承诺。拒绝(
您刚刚耦合了throw
…在调用data=await之前我有console.log,但它没有打印,根本没有点击try。要确认,您是否在const data=await this.processOrderSummaryRequest(请求)之前添加了console.log
在processOrderSummary
中?您尝试过在调试器中单步执行代码吗?是的,我在调用wait之前添加了console.log,但它没有打印,这意味着它没有点击Try