Проблема с MergeMap с forkJoin Angular 5

Я пытаюсь выполнить 5 параллельных HTTP-запросов с mergeMap и forkJoin условно. Для меня только первый API выполняется, а остальные API не запускаются.

моя функция выполнит первый API, и если он вернет статус "NOT_FOUND", то мне нужно выполнить еще 5 API и вернуть конечный результат. Если Iam получает статус, отличный от NOT_FOUND, нужно просто вернуть наблюдаемое из первого http-запроса. Я пробовал разные варианты, но, похоже, ничего не работает. Ниже общего кода я получаю "ОШИБКА TypeError: Невозможно получить свойство 'map' с неопределенной или нулевой ссылкой"

public myPostWrapper( url, body, flag): Observable<any> {
 return this.http.post( url, body, { headers: this.headers } )
        .map(( out: any ) => {
            console.log( 'out', JSON.stringify( out ) );
            this.result = out;
        } )
        .mergeMap(( response: any ) => {
            console.log( 'response-inside', JSON.stringify( response ) );
            if ( this.result.status === 'NOT_FOUND' ) {
                return Observable.forkJoin(
                    response.map(( resp: any ) => {
                        return this.http.post(url, body, { headers: this.headers })
                            .map(( res: any ) => {
                                const section: any = res;
                                return section;
                            } );
                    } ),
                    response.map(( resp: any ) => {
                        return this.http.post(url, body, { headers: this.headers })
                            .map(( res: any ) => {
                                const section: any = res;
                                return section;
                            } );
                    } )
                );
            } else {
                return Observable.of( this.result );
            }
        } )
        .catch(( error: any ) => Observable.throw( error || 'Server error' ) 
);

}

Любая помощь / направление будет с благодарностью. Обратите внимание, что я использую Rxjs 5.52 с Angular 5

1 ответ

Во-первых mapгде вы устанавливаете this.resultВы ничего не возвращаете. Это означает, что следующие части цепи будут работать на undefined, добавлять return out; к первому map операция, которая должна решить вашу проблему.

...
return this.http.post( url, body, { headers: this.headers } )
    .map(( out: any ) => {
        console.log( 'out', JSON.stringify( out ) );
        this.result = out;
        return out; // <--- This return here
    } )
...

По желанию вы должны заменить все вхождения response в вашем mergeMap с this.result,

Другие вопросы по тегам