Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用try-and-catch异步方法的正确方法是什么?_Javascript_Typescript_Promise_Try Catch - Fatal编程技术网

Javascript 使用try-and-catch异步方法的正确方法是什么?

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

我有来自客户端的请求,我可以在try和catch之前打印request.body,但它没有进入try块,从而停止所有底层链接的实现,任何关于实现错误的想法我花了数小时在这方面都找不到问题

梅因酒店

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