2017-01-04 6 views
5

fetchを使用して、いくつかのAPIコールを反応ネイティブで行います。フェッチはサーバへのリクエストを起動せず、thenブロックまたはexceptブロックは呼び出されません。これは無作為に起こります、私は競争状態またはそれに類するものがあるかもしれないと思います。このようなリクエストを1回失敗した後は、アプリをリロードするまで、同じAPIへのリクエストは一度も発生しません。どのようにこれの背後に理由を追跡するための任意のアイデア。私が使用したコードは以下の通りです。ネイティブフェッチに反応して呼び出さない、またはキャッチしない

const host = liveBaseHost; 
const url = `${host}${route}?observer_id=${user._id}`; 
let options = Object.assign({ 
     method: verb 
    }, params 
    ? { 
     body: JSON.stringify(params) 
    } 
    : null); 
options.headers = NimbusApi.headers(user) 
return fetch(url, options).then(resp => { 
    let json = resp.json(); 
    if (resp.ok) { 
     return json 
    } 
    return json.then(err => { 
     throw err 
    }); 
}).then(json => json); 
+0

このようにcatchブロックを追加しようとします。.catch(error => error) –

+0

Chromeでデバッグするときにのみ発生しますか?もしそうなら、私は[この問題](https://github.com/facebook/react-native/issues/6679)に関連するかもしれません。 'resp.json()'の前に 'setTimeout(()=> null、0);を追加してみてください。 – ncuillery

+0

@ncuilleryあなたの応答をありがとう、それはクロムでしか起こっていない、それはアプリのテストビルドでも起こります。私があなたが言及した問題を見たが、私のものは少し違っていた。その問題では、resp、json()メソッドがブロックされますが、私の場合、fetchメソッドが複数回呼び出されたとしてもthenブロックは決して実行されません。 –

答えて

3

フェッチがエラーをスローしていて、キャッチブロックを追加していない可能性があります。これを試してみてください:

promise(params) 
    .then(resp => { /* This callback is called is promise is resolved */ }, 
     cause => {/* This callback is called if primise is rejected */}) 
    .catch(error => { /* This callback is called if an unmanaged error is thrown */ }); 

私は以前と同じ問題に直面したので、私はこの方法でそれを使用しています:

return fetch(url, options) 
    .then((resp) => { 
    if (resp.ok) { 
     return resp.json() 
     .then((responseData) => { 
      return responseData; 
     }); 
    } 
    return resp.json() 
     .then((error) => { 
     return Promise.reject(error); 
     }); 
    }) 
    .catch(err => {/* catch the error here */}); 

は約束は通常、この形式を持っていることを忘れないでください。

あなたに役立つかどうか教えてください。あなたのことを確認し、

let res; 
try { 
    res = fetch(); 
} catch(err) { 
    console.error('err.message:', err.message); 
} 

あなたは「ネットワーク障害・エラー」表示された場合、それはCORSまたは本当に面白い1のどちらかであるが、それは、過去に私を得た:

+1

あなたの答えをありがとう、実際に私はこのメソッドとこれを呼び出す別の方法で約束を返します私は決して実行されないキャッチブロックがあります。 –

+0

エラーがスローされている場所を確認するためにデバッグしようとしましたか?あなたがコンソールに何かエラーを見ましたか? –

+0

コンソールに何のエラーもスローされず、エラーも表示されません。非常に奇妙です。 –

0

のtry-catchであなたのfetchをラップ飛行機モードにはありません。

関連する問題