8

React Native のフェッチに関する奇妙な問題。以前は機能していましたが、何を変更したかはわかりませんが、機能しなくなりました。

login(data,success,fail){
    console.log('doing fb login');
    fetch(host+'/api/login?credentials='+data.credentials)
        .then( (response) => {
            console.log('got login response');
            return response.json();
        } )
        .then( json => {
            console.log('got login json');
            if(json.result!='fail'){
                success(json);
            } else {
                fail(json);
            }
            return json;
        })
        .catch((error) => {
          console.warn(error);
        });
}

問題は、最初の 'got login response' メッセージが表示されるが、その後ハングするだけで、'got login json' を起動する画面を押すまで何も起こらず、期待どおりに続行することです。

これは一貫して発生しており、2 番目の .then() が自動的に起動しない理由がわからないため、イライラします。

どんな助けでも大歓迎です。

編集: 同様の質問が見つかりました:何が反応ネイティブでこの遅いフェッチを引き起こしている可能性がありますか?

すでに見られているようです:https://github.com/facebook/react-native/issues/6679

また、この動作は、Chrome デバッグ ツールが有効になっている場合にのみ見られます...興味深い

4

2 に答える 2

0

response.json() は promiseであり、値ではありません。したがって、それはあなたのために解決しません。また、json.result の代わりに response.status に基づいて結果を確認します。これは、場合によってはサーバーの応答が json (たとえば 401) に変換できないためです。

.then( (response) => {
   if (response.status >= 200 && response.status < 300) {
      response.json().then((data) => success(data));
   } else {
      fail(response);
   }
})
于 2017-04-27T13:58:41.503 に答える