【问题标题】:How to return a Observable in promise function如何在 promise 函数中返回 Observable
【发布时间】:2020-07-14 10:48:30
【问题描述】:

我用离子+电容器+角度编写了一个http拦截器。由于我使用的是电容器,因此我正在访问 promise 函数中的存储。但是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&lt;Observable&lt;HttpEvent&lt;any&gt;&gt;&gt; 但我想要 Observable&lt;HttpEvent&lt;any&gt;&gt;

谁能帮我确定如何从 Promise 返回 Observable。谢谢。

【问题讨论】:

    标签: observable angular8 angular-promise


    【解决方案1】:

    答案是 pipe switchMap 而不是 map 作为回报 (this.getItem()).pipe(map(data => {}));

    【讨论】:

    • 非常高兴看到你充实了这个答案。
    猜你喜欢
    • 1970-01-01
    • 2021-12-06
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多