Обещание не разрешается в машинописи catchError - PullRequest
0 голосов
/ 29 мая 2019

Мне нужно разрешение (false) в catchError, но это не работает.

В моем loin.page.ts

async login() {
      if (this.signin.valid) {
        const controls = this.signin.controls;
        const valid = await this.authService.signin(controls.email.value, controls.password.value);
        if (valid) {
            this.navCtrl.navigateRoot('/user', { animated: true});
        } else {
            console.log('Bad credentials');
        }
    }
  }

authService.ts

import { HttpClient, HttpHeaders } from '@angular/common/http';
import { map, catchError } from 'rxjs/operators';

constructor(private http: HttpClient) {}

signin(email, password) {

        const headers = new HttpHeaders({
            Accept: 'application/json',
            'Content-Type': 'application/json',
            'Access-Control-Allow-Origin': '*',
        });
        const data = {
            email,
            password
        };
        const url = URL_SERVICIOS + 'xxx';
        return new Promise ((resolve) => {

            this.http.post(url, data).pipe(
                map( (result: any) => {
                    this.credentials = result;
                    resolve(true);
                }),
                catchError(() => {
                    return Promise.resolve(false);
                })
            ).subscribe();
        });
     }

Этот код заканчивается на 'return Promise.resolve (false);' и не продолжается в loin.page.ts

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Вы можете попробовать, как показано ниже, только с аннотацией type и использованным resol () как в блоке success, так и в блоке catch

...
 return new Promise<boolean>((resolve) => {
     this.http.post(url, data).pipe(
         map( (result: any) => {
             this.credentials = result;
             resolve(true);
         }),
         catchError(() => {
             resolve(false);
         })
         ).subscribe();
     });
...
0 голосов
/ 29 мая 2019

это потому, что вы возвращаете новое Обещание, которое разрешит вместо вызова обратного вызова.

Попробуйте сделать:

        catchError(() => {
             resolve(false);
         })
...