简体   繁体   English

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

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

I am trying to push responses to array based on a conditional statement. 我试图将响应推送到基于条件语句的数组。 The response is in request details object it would be nested object with different LOBS so it could be both or one lob object in the request. 响应位于请求details对象中,它将是具有不同LOBS嵌套对象,因此它可以是请求中的两个或一个lob对象。 If both lobs are present it works fine. 如果两个瓣都存在,则工作正常。 However, when I pass just one combineResponse method the code is failing because one of the arguments is not passed. 但是,当我仅传递一个combineResponse方法时,代码将失败,因为未传递arguments之一。 How can I resolve this issue or better yet, is there a better approach to handle this? 我该如何解决这个问题,或者有更好的解决办法,是否有更好的方法来解决?

main.ts 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;
    }

You need a default value or a check for null or undefined. 您需要一个默认值或检查是否为null或undefined。 Try: 尝试:

 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;
    }

What I did: 我做了什么:

  1. Removed default assignments for _dataAdmin and _dataUser. 删除了_dataAdmin和_dataUser的默认分配。
  2. Fixed the push to only push values for arguments that are defined. 修复了将推送仅推送到已定义参数的值的问题。
  3. Changed if logic on "partial Error" code block to check if variables are defined first and to return partial error if just one of the statusCodes is wrong(what I think was the intent of the code) 更改了“部分错误”代码块上的逻辑,以检查是否首先定义了变量,如果只有一个statusCodes错误,则返回部分错误(我认为这是代码的意图)

What I assumed: The await calls return null or undefined if the request fails entirely. 我的假设:如果请求完全失败,则await调用返回null或未定义。

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

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