Как выполнить обещания и избежать дублирования ответов? - PullRequest
0 голосов
/ 02 октября 2018

У меня есть метод execute, который создает запросы и вызывает каждый из этих URL-адресов для получения ответов и объединяет их, используя promise.all, проблема с приведенным ниже кодом заключается в дублировании обоих ответов и добавлении его дважды в combineResponses, может кто-нибудь помочьвот что пошло не так или лучший подход к решению объединить ответы с обещанием. все?

main.ts

export class GetAccountBalanceController extends Controller {

    private _request: IRequestURL[] = [];
    constructor() {
        super();
    }
    private async execute(@Request() request: ExpressRequest): Promise < any > {
        const combinedResponses: IResponse[] = [];
        if (request.body.includeSpecialty === true) {
            const bRetSpecialty = await this.specialtyBalanceRequest(request);
            this._request.push(bRetSpecialty);
            try {
                const specialtyResponse: IResponse = await makeRequest(this._request);
                combinedResponses.push(specialtyResponse);
            } catch (err) {
                return Promise.reject(err);
            }
        }
        if (request.body.getAccountBalanceRequest) {
            const bRetPBM = await this.pmbBalanceRequest(request);
            this._request.push(bRetPBM);
            try {
                const pbmResponse: IResponse = await makeRequest(this._request);
                combinedResponses.push(pbmResponse);
            } catch (err) {
                return Promise.reject(err);
            }
        }
        return await Promise.all(combinedResponses);

    }
}

во время работы другая мысль была

  private async execute(@Request() request: ExpressRequest): Promise<any> {
        const combinedResponses: IResponse[] = [];
        if (request.body.includeSpecialty === true) {
            const bRetSpecialty = await this.specialtyBalanceRequest(request);
            this._request.push(bRetSpecialty);
        }
        if (request.body.getAccountBalanceRequest) {
            const bRetPBM = await this.pmbBalanceRequest(request);
            this._request.push(bRetPBM);
        }

        try {
            const _data: IResponse = await makeRequest(this._request);
            combinedResponses.push(_data);
        } catch (err) {
            return Promise.reject(err);
        }
        return await Promise.all(combinedResponses);

    }
...