2016-03-28 19 views
5

Strano problema con il recupero di React Native. In precedenza funzionava, non so cosa ho cambiato ma ha smesso di funzionare.React Native Fetch: seconda promessa sospesa

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); 
     }); 
} 

Il problema è che vedo il primo messaggio 'Si login risposta', ma poi si blocca solo, e non succede nulla fino a quando si preme lo schermo su cui si spara il 'JSON ma ho il login' e prosegue come previsto.

È frustrante perché questo sta accadendo in modo coerente e non riesco a capire perché il secondo .then() non stia sparando automaticamente.

Qualsiasi aiuto è molto apprezzato.

EDIT: trovato una domanda simile: What could be causing this slow fetch in react native?

pare è già essere guardato: https://github.com/facebook/react-native/issues/6679

Anche il comportamento è visto solo whne gli strumenti di debug Chrome sono abilitati ... interessante

+0

stessa cosa è successo a me e ha smesso di accadere quando ho disabilitato il debug attraverso gli strumenti di sviluppo di Chrome. Grazie mille per aver menzionato quella parte, mi ha salvato. –

+0

Possibile duplicato di [Quale potrebbe essere la causa di questo lento recupero in risposta nativo?] (Http://stackoverflow.com/questions/36262456/what-could-be-causing-this-slow-fetch-in-react-native) –

risposta

0

response.json() is a promise, non un valore. Quindi non risolverà per te. Vorrei anche controllare il risultato basato su response.status invece di json.result perché per alcuni casi la risposta del server non è convertibile in json (401 per esempio).

.then((response) => { 
    if (response.status >= 200 && response.status < 300) { 
     response.json().then((data) => success(data)); 
    } else { 
     fail(response); 
    } 
})