8

React Native 的 fetch 出现了奇怪的问题。它以前工作过,不确定我改变了什么,但它停止工作了。

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

问题是我看到了第一个“得到登录响应”消息,但是它只是挂起,直到我按下它触发“得到登录 json”并按预期继续的屏幕之前什么都没有发生。

这令人沮丧,因为这种情况一直在发生,我不明白为什么第二个 .then() 没有自动触发。

任何帮助深表感谢。

编辑:发现了一个类似的问题:什么可能导致反应原生的这种缓慢获取?

似乎已经在查看:https ://github.com/facebook/react-native/issues/6679

此外,只有在启用 Chrome 调试工具时才会看到这种行为......有趣

4

2 回答 2

0

response.json() 是一个承诺,而不是一个值。所以它不会为你解决。我还会根据 response.status 而不是 json.result 检查结果,因为在某些情况下,服务器的响应无法转换为 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 回答
-1

console.log 是一个阻塞语句。A synchrone that stop the code until it is resolved but using with Chrome Debug it can be slow when the tab is not in foreground.

于 2018-08-13T20:01:27.543 回答