Варианты Angular4 разных кодов состояния?

Мой API дает мне различные типы кодов состояния для предупреждений и ошибок. Я должен показывать разные предупреждения в зависимости от ответа.

Я вызываю http-сервис следующим образом:

сервис.тс

@Injectable()
export class TestService {

    getData () {
        return this.http.get('publi/api/list')
            .map((response: Response) => response.json())
            .catch(this.handleError);
    }

    public handleError(error: any): Observable<any> {
        console.log(error, 'error!!!!!!');
        return Observable.throw(error.json() || 'server error');
    }
}

компонент.ts

export class TestComponent implements OnInit {

    constructor(private testService: TestService) { }

    ngOnInit() {
        this.getAllList();
    }

    getAllList() {
        this.testService.getData()
            .subscribe(res => this.sucessList(res),
            err => this.errList(err))
    }

    sucessList(res) {
        console.log(res, 'sucessApprovalsPermissions');
    }

    // Here I need varions
    errList(err) {
        console.log(err, 'err');
        this.errApprovalPermissions = err.message.message;
    }
}

person Runali    schedule 13.12.2017    source источник
comment
Разместите пример ответа.   -  person Swoox    schedule 13.12.2017


Ответы (2)


Что бы я сделал на вашем месте, так это поставил бы перехватчик. Перехватчики — это службы, которые вызываются перед тем, как предоставить вам данные из вашего запроса.

Например, вот перехватчик ошибок:

export class ErrorHandlerService implements HttpInterceptor {

  constructor() { }

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next
      .handle(req)
      .catch(err => {
        /* Do what you want here */
        /* The return a thrown Observable, containing whatever you want */
        return Observable.throw(err);
      });
  }
}

Затем вам нужно предоставить его в модуле, например:

providers: [
  { provide: HTTP_INTERCEPTORS, useClass: ErrorHandlerService, multi: true }
]

Все, что вам нужно сделать сейчас, это обработать код ошибки в улове, и все готово!

person Community    schedule 13.12.2017

вы можете использовать метод подписки, подобный этому

 getAllList() {
  this.testService.getData().subscribe(response => {
    if (response.status === 200 ) {
     // Write your own code here
    }
    else if (response.status === 203) {
     // your own code
    }
   }, error => {
   if (error) {
     // your own code
   }
  });
 }

таким образом вы можете получить разные коды состояния.

но если вы тоже хотите ловить ошибки! то я бы посоветовал вам следовать этому: https://stackoverflow.com/questions/37052617/how-to-deal-with-http-status-codes-other-than-200-in-angular-2

person Al Masum Fahim    schedule 13.12.2017