Как получить возвращаемое значение в трубе? - PullRequest
0 голосов
/ 19 июня 2019

У меня есть метод create (newItem), который создает элемент в базе данных и возвращает id (Observable) и getDetails (id), который возвращает Observable

import { mergeMap as _observableMergeMap, catchError as _observableCatch } from 'rxjs/operators';
import { Observable, throwError as _observableThrow, of as _observableOf } from 'rxjs';

create(input: Input | null | undefined): Observable<number> {
    let url_ = this.baseUrl + "/api/services/app/create";
    url_ = url_.replace(/[?&]$/, "");

    const content_ = JSON.stringify(input);

    let options_ : any = {
        body: content_,
        observe: "response",
        responseType: "blob",
        headers: new HttpHeaders({
            "Content-Type": "application/json", 
            "Accept": "application/json"
        })
    };

    return this.http.request("post", url_, options_).pipe(_observableMergeMap((response_ : any) => {
        return this.processCreateAsync(response_);
    })).pipe(_observableCatch((response_: any) => {
        if (response_ instanceof HttpResponseBase) {
            try {
                return this.processCreateAsync(<any>response_);
            } catch (e) {
                return <Observable<number>><any>_observableThrow(e);
            }
        } else
            return <Observable<number>><any>_observableThrow(response_);
    }));
}

Я пытаюсь вызвать метод create и получить идентификатор из createметод и получить детали с этим идентификатором.

 this._dataService.create(newItem)
            .pipe(
                switchMap( id => {
                    return this._dataService.getDetails(id);

                })
             )
            .subscribe(result => {
                // Do stuff with result
                },
                error => {
                    console.log(error);
                }));

Но я получаю сообщение об ошибке «идентификатор не определен» в switchMap. Как получить возвращаемое значение из метода create и передать его в метод getDetails?

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

Я понизил rxjs до 6.2.0 и @ types / node до 10.1.4, и теперь он работает.

0 голосов
/ 19 июня 2019

В вашем примере кода переменная result в subscribe должна содержать значение id.

...