繁体   English   中英

如何根据条件推送到对象数组?

[英]How to push to array of object based on condition?

我试图将响应推送到基于条件语句的数组。 响应位于请求details对象中,它将是具有不同LOBS嵌套对象,因此它可以是请求中的两个或一个lob对象。 如果两个瓣都存在,则工作正常。 但是,当我仅传递一个combineResponse方法时,代码将失败,因为未传递arguments之一。 我该如何解决这个问题,或者有更好的解决办法,是否有更好的方法来解决?

main.ts

 private async execute(@Request() request: ExpressRequest): Promise<any> {
        let _combineData: any = [];
        const accountBalanceRequest = request.body.getAccountBalanceRequest;
        const LOB = accountBalanceRequest.details.lineofBusiness;
        let _dataAdmin: any = {};
        let _dataUser: any = {};
        try {
            if (LOB === "ADMIN") {
                _dataAdmin = await this.Admin.adminRequestHandler(accountBalanceRequest);
            }
            if (LOB === "USER") {
                _dataUser = await this.User.userRequestHanlder(request);
            }
            const combinedResponses = this.combineResponse(_dataAdmin, _dataUser, request);
            _combineData = combinedResponses;
        } catch (err) {
            return err;
        }
        return _combineData;
    }


    private combineResponse(AdminResponse: any, UserResponse: any, request: any): any {
            const combinedResponses: any = [];
            let finalResponse: any = {};
            const refID: string = request.body.header.serviceContext.refID;
            const tokenID: string = request.body.header.serviceContext.tokenID;

            combinedResponses.push(AdminResponse, UserResponse);
            if (AdminResponse.header.statusCode === "0000" && UserResponse.header.statusCode === "0000") {
                finalResponse = {
                    getAccountBalanceResponse: {
                        header: request.body.header),
                        details: combinedResponses
                    }
                };
            }

            if (AdminResponse.header.statusCode !== "0000" && UserResponse.header.statusCode !== "0000") {
                finalResponse = {
                    getAccountBalanceResponse: {
                        header: {
                            statusCode: "9999",
                            statusDesc: "partial Error",
                            refID,
                            tokenID
                        },
                        details: combinedResponses
                    }
                };
            }

            return finalResponse;
    }

您需要一个默认值或检查是否为null或undefined。 尝试:

 private async execute(@Request() request: ExpressRequest): Promise<any> {
        let _combineData: any = [];
        const accountBalanceRequest = request.body.getAccountBalanceRequest;
        const LOB = accountBalanceRequest.details.lineofBusiness;
        let _dataAdmin: any;
        let _dataUser: any;
        try {
            if (LOB === "ADMIN") {
                _dataAdmin = await this.Admin.adminRequestHandler(accountBalanceRequest);
            }
            if (LOB === "USER") {
                _dataUser = await this.User.userRequestHanlder(request);
            }
            const combinedResponses = this.combineResponse(_dataAdmin, _dataUser, request);
            _combineData = combinedResponses;
        } catch (err) {
            return err;
        }
        return _combineData;
    }
    private combineResponse(AdminResponse: any, UserResponse: any, request: any): any {
            const combinedResponses: any = [];
            let finalResponse: any = {};
            const refID: string = request.body.header.serviceContext.refID;
            const tokenID: string = request.body.header.serviceContext.tokenID;

            if (AdminResponse) {
                combinedResponses.push(AdminResponse);
            }
            if (UserResponse) {
                combinedResponses.push(UserResponse);
            }

            if (AdminResponse.header.statusCode === "0000" && UserResponse.header.statusCode === "0000") {
                finalResponse = {
                    getAccountBalanceResponse: {
                        header: request.body.header),
                        details: combinedResponses
                    }
                };
            }

            if ((!AdminResponse || AdminResponse.header.statusCode !== "0000") || (!UserResponse || UserResponse.header.statusCode !== "0000")) {
                finalResponse = {
                    getAccountBalanceResponse: {
                        header: {
                            statusCode: "9999",
                            statusDesc: "partial Error",
                            refID,
                            tokenID
                        },
                        details: combinedResponses
                    }
                };
            }

            return finalResponse;
    }

我做了什么:

  1. 删除了_dataAdmin和_dataUser的默认分配。
  2. 修复了将推送仅推送到已定义参数的值的问题。
  3. 更改了“部分错误”代码块上的逻辑,以检查是否首先定义了变量,如果只有一个statusCodes错误,则返回部分错误(我认为这是代码的意图)

我的假设:如果请求完全失败,则await调用返回null或未定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM