2016-04-18 7 views
0

Я работаю над услугой «Угловая 2», возвращающей данные из резервного сервера WebApi.Обработка ошибок в Angular2

Я пытаюсь сделать это изящно обрабатывать сервис, который не доступен, однако я получаю неожиданную информацию об ошибках.

Вот код

update(fund, transactionId:string, showToastOnError: boolean, useCorrectUrl: boolean) { 
     let options = this.getStartCall(); 
     options.headers.append("transaction-id", transactionId) 
     let url = fundsUrl + (useCorrectUrl ? "" : "breakTheUrl"); 
     return this._http.put(url, JSON.stringify(fund), options) 
      .map(res => res.json()) 
      //.retry(5) 
      .catch(errorResponse => { 
       let res = <Response>errorResponse; 
       let err = res.json(); 
       let emsg = err ? 
        (err.error ? err.error : JSON.stringify(err)) : 
        (res.statusText || 'unknown error'); 
       this._logger.log(emsg, "The fund was not updated", LogLevel.Error, showToastOnError); 
       return Observable.throw(emsg); 
      }) 
      .finally(() => this._spinnerService.hide()); 

    } 

Когда я смотрю на сетевом трафике, я вижу ошибку 404, как ожидалось.

Моя проблема в моей функции catch.

Вот значение х я вижу:

JSON.stringify(errorResponse) 

{"_body":{"isTrusted":true},"status":200,"statusText":"Ok","headers":{},"type":3,"url":null}" 

errorResponse.json() 

bubbles: false 
cancelBubble: false 
cancelable: false 
currentTarget: XMLHttpRequest 
defaultPrevented: false 
eventPhase: 2 
isTrusted: true 
isTrusted: true 
lengthComputable: false 
loaded: 0 
path: Array[0] 
position: 0 
returnValue: true 
srcElement: XMLHttpRequest 
target: XMLHttpRequest 
timeStamp: 1460990458693 
total: 0 
totalSize: 0 
type: "error" 
__proto__: XMLHttpRequestProgressEvent 

Могу ли я сделать что-то здесь не так, или это ошибка в Angular2 бета 15?

ответ

0

В большинстве случаев у вас есть такое значение для ошибки, когда обратный вызов вызывается для основного объекта XHR. См. Эту строку в исходном коде: https://github.com/angular/angular/blob/master/modules/angular2/src/http/backends/xhr_backend.ts#L70.

Это не должно происходить для кода состояния 404, а скорее по ошибке, например net::ERR_NAME_NOT_RESOLVED.

Код статуса 404 обрабатывается onload обратный вызов: https://github.com/angular/angular/blob/master/modules/angular2/src/http/backends/xhr_backend.ts#L37.

Я сделал тест с бета-15, и я не могу воспроизвести вашу проблему.

Посмотрите это plunkr: https://plnkr.co/edit/SB3KLZlbJT3wm9ATAE0R?p=preview.

+0

Благодарим вас за отзыв. Похоже, проблема связана с нашей базой данных WebApi. Я изменил URL-адрес на тот же, что и ваш, и вдруг я получил правильные коды ошибок. – Mark

+0

Добро пожаловать! Странно, что вы видите код состояния 404 в сетевой трафике. Вы имеете в виду инструменты dev (вкладка сети)? –

+0

Да, это должно быть что-то странное в WebApi. – Mark

Смежные вопросы