Ошибка при получении токена на перехватчике - введите Promise> 'нельзя назначить типу' Observable' - PullRequest
0 голосов
/ 07 июня 2018

Я создаю перехватчик для отправки токена вместе с запросами на API.

Я использую @ionic/storage для хранения информации о пользователе.Однако, когда я пытаюсь получить токен в конструкторе для сохранения в переменную (например, private token: string), мой перехватчик не может получить это значение, даже если токен существует. Я полагаю, это происходит потому, что перехват выполняется до завершения функции this.storage.get.

Как это исправить?

Я пытался поставить this.storage.get функция внутри перехвата, но ошибка возврата:

Type 'Promise >> 'нельзя назначить типу' Observable > '.Свойство _isScalar отсутствует в типе Promise > '.

Посмотрите на код:

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {  
    return this.storage.get('token')
        .then((token) => {
            if (token) {
                const newRequest = req.clone({ setHeaders: { 'Authorization': `Bearer ${token}` } });

                return next.handle(newRequest);
            } else {
                return next.handle(req);
            }
        })
        .catch(() => {
            //TODO: Trata erro
        })
}

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Преобразуйте обещание хранения в Observable перед его возвратом:

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    var promise = this.storage.get('token')
        .then((token) => {
            if (token) {
                const newRequest = req.clone({ setHeaders: { 'Authorization': `Bearer ${token}` } });

                return next.handle(newRequest);
            } else {
                return next.handle(req);
            }
        })
        .catch((error) => {
            //TODO: Trata erro
            throw error;
        })
    return Observable.fromPromise(promise);
}
0 голосов
/ 07 июня 2018

Вы можете конвертировать Promise в Observable с помощью метода Observable.fromPromise.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...