2016-03-25 21 views
1

fetchには次の呼び出しがあります。fetch apiを使用して500応答を処理する

this.http.fetch('flasher', { method: 'post', body: jsonPayload }) 
    .then(response => response.json()) 
    .then(data => console.log(data)); 

これは、200応答を受け取ったときに機能しますが、500応答を受け取ったときにコンソールに何も記録しません。どのように500を扱うのですか?

+1

MDN - Checking that the fetch was successful

私は全くのフレームワークやフェッチAPIに慣れていないんだけど、私はこれを見つけます。https://gist.github .com/bryanrsmith/14caed2015b9c54e70c3; fetch()。then()。catch(unk => conole.log(unk)); – AndreaBogazzi

+0

いい研究。これもここに表示されています:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetchありがとうございました。 –

答えて

3

作業溶液

catch作品でthenを組み合わせます。 Responseオブジェクトを含むPromiseを返すfetch()

fetch('http://some-site.com/api/some.json') 
    .then(function(response) {      // first then() 
     if(response.ok) 
     { 
     return response.text();   
     } 

     throw new Error('Something went wrong.'); 
    }) 
    .then(function(text) {       // second then() 
    console.log('Request successful', text); 
    }) 
    .catch(function(error) {      // catch 
    log('Request failed', error) 
    }); 

詳細

Promiseが満たされるか拒否される可能性があります。フルフィルメントは最初にthen()を実行し、約束を返し、2番目のthen()を実行します。拒絶は最初にthen()にスローされ、catch()にジャンプします。

参照

MDN - Promise

Google - Introduction to Fetch

+0

これはおそらくあなたが望むことをするつもりはありません。これは、(サーバーが4xx-5xxの状態でテキストエラー応答を返した場合)偽陽性となるか、またはテキストの抽出に失敗し、 'response.text()'の呼び出しのエラーをログに記録します。おそらく役に立たないでしょう。代わりに、最初の 'then'で状態コードまたは' res.ok'を明示的にチェックし、それに応じて応答する必要があります。 [ここ](https://www.tjvantoll.com/2015/09/13/fetch-and-errors/)を参照してください。 – neverfox

+0

@neverfoxありがとうございました。更新しました。 –

関連する問題