Как вернуть Observable в функцию обещания - PullRequest
0 голосов
/ 02 апреля 2020

Я написал http-перехватчик в ионном c + конденсаторе * angular. Поскольку я использую конденсатор, я получаю доступ к хранилищу в функции обещания. Но http перехватчик исключает нас, чтобы вернуть HttpEvent Observable. Вот мой код

import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpHandler, HttpRequest, HttpEvent, HttpResponse } from '@angular/common/http';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

import { Plugins } from '@capacitor/core';

const { Storage } = Plugins;

@Injectable()
export class Interceptor implements HttpInterceptor {
    constructor() { }

    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

        this.getItem().then(value => {
            const token = value['value'];
            if (token) {
                request = request.clone({ headers: request.headers.set('Authorization', 'Bearer ' + token) });
            }
            if (!request.headers.has('Content-Type')) {
                request = request.clone({ headers: request.headers.set('Content-Type', 'application/json') });
            }
            request = request.clone({ headers: request.headers.set('Accept', 'application/json') });
            return next.handle(request).pipe(
                map((event: HttpEvent<any>) => {
                    if (event instanceof HttpResponse) {
                    }
                    return event;
                }));
        });
    }

    async getItem() {
        return await Storage.get({ key: 'revolt-token' });
    }
}

Пока я пробовал

return from(this.getItem()).pipe(map(data => {
            return next.handle(request).pipe(
                map((event: HttpEvent<any>) => {
                    if (event instanceof HttpResponse) {
                    }
                    return event;
                }));
        });

Но он возвращает Observable<Observable<HttpEvent<any>>>, но я хочу Observable<HttpEvent<any>>

Может кто-нибудь помочь мне определить как вернуть Observable из Обещания. Спасибо.

1 Ответ

1 голос
/ 03 апреля 2020

Ответом является pipe switchMap вместо map в ответе от (this.getItem ()). Pipe (map (data => {}));

...