angular2 передает результат из http-запроса в http-запрос на слияние

Я пытаюсь получить результат одного метода, который возвращает наблюдаемое для передачи во второй запрос.

this.runfirstmethod(headers).mergeMap(response => this.http[verb](url, response).map(res => res.json()))

Это все, что я делаю, я думаю, что делаю что-то не так, потому что не могу получить заголовки из buildAzureHeaders.

обслуживание

    buildAzureHeaders(headers): Observable<Headers> {

    if (headers == null) {
        headers = new Headers();
    }

    if (JSON.parse(localStorage.getItem('azureToken')).token == null || this.azureAccessToken == null) {
        this.Adal4Service.acquireToken("https://graph.windows.net").map(token => {
            this.azureAccessToken = token;
            localStorage.setItem('azureToken', token);
            headers.append('Authorization', "Bearer " + token);
            return Observable.of(headers);
        });
    } else {
        headers.append('Authorization', "Bearer " + localStorage.setItem('azureToken', JSON.parse(localStorage.getItem('azureToken')).token));
        console.log("Headers: " + headers);
        return Observable.of(headers);
    }
}

invokeRequest(verb, url, headers?, body?): Observable<any> {
    return this.buildAzureHeaders(headers).switchMap(builtHeaders => this.http[verb](url, builtHeaders))
}

составная часть

this.ApiAuthService.invokeRequest("get","https://graph.windows.net/aseracare.com/users?api-version=1.6").subscribe(res => {
    console.log(res);
  });

person user1552172    schedule 27.09.2017    source источник
comment
Ищете switchMap ?   -  person hlfrmn    schedule 27.09.2017
comment
Я так думаю, все еще работаю над этим, но карта переключения, кажется, то, что мне нужно.   -  person user1552172    schedule 27.09.2017


Ответы (1)


class MyClass {

    firstMethod(headers: object): Observable<object> {
        return Observable.of({qwerty: 123456});
    }

    secondMethod(something: object): Observable<string> {
        return Observable.of('OK');
    }

    runner(): void {
        const obj = {a:1};
        this
            .firstMethod(obj)   // object -> Observable
            .switchMap(         // Observable -> object
                (returnedObject: object) => this.secondMethod(returnedObject)  // object -> Observable
            ).subscribe((x: string) => console.log(x)) // logs 'OK'
    }
}

SwitchMap «конвертирует» первый наблюдаемый объект в значение, которое может быть получено вторым.

Для получения более точной документации см. здесь и здесь

person hlfrmn    schedule 27.09.2017
comment
Я получаю undefined из первого метода, который работает, если я обычно подписываюсь на него. вернуть Observable.of (заголовки); это должно заставить карту переключения произойти, но я получаю Невозможно прочитать свойство 'switchMap' неопределенного - person user1552172; 27.09.2017
comment
@user1552172 user1552172 runfirstmethod какая подпись у этого метода? - person hlfrmn; 28.09.2017
comment
Я обновил весь сервис и компонент, я не могу запустить карту, чтобы вернуться в карту переключения. - person user1552172; 28.09.2017
comment
@user1552172 this.Adal4Service.acquireToken - нужно вернуть. На данный момент первая ветвь if не возвращает никакого значения. - person hlfrmn; 28.09.2017
comment
вернуть Observable.of (заголовки); это не возвращается, черт возьми, я надеялся, что смогу использовать этот отдельный метод для создания заголовков с токенами доступа и т. д. - person user1552172; 29.09.2017
comment
@user1552172 user1552172 Ваш текущий процесс выглядит примерно так: 1. Если нет заголовков, создайте новые заголовки. 2.1 Если нет токена, приобрести токен (без возврата). 2.2 В противном случае вернуть заголовки с существующим токеном. - person hlfrmn; 29.09.2017
comment
Давайте продолжим обсуждение в чате. - person user1552172; 29.09.2017