Javascript 反应本机获取:第二个承诺挂起

Javascript 反应本机获取:第二个承诺挂起,javascript,reactjs,promise,react-native,fetch-api,Javascript,Reactjs,Promise,React Native,Fetch Api,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');

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);
        });
}
问题是我看到了第一条“Get login response”消息,但它只是挂起,在按下屏幕触发“Get login json”并按预期继续之前,不会发生任何事情

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

非常感谢您的帮助

编辑:发现类似问题:

似乎已经在考虑:

此外,这种行为仅在Chrome调试工具启用时出现。。。有趣的,不是一个值。所以这对你来说是无法解决的。 我还将基于response.status而不是json.result检查结果,因为在某些情况下,服务器的响应无法转换为json(例如401)

。然后((响应)=>{
如果(response.status>=200&&response.status<300){
然后((数据)=>success(数据));
}否则{
失败(响应);
}
})

console.log是一个阻塞语句。一种同步,在解决问题之前停止代码,但在使用Chrome Debug时,如果选项卡不在前台,则速度可能会很慢。

同样的情况也发生在我身上,并且在我通过Chrome dev工具禁用调试时停止了。非常感谢您提到这一部分,救了我。从
then
函数返回承诺的可能重复应该在链接到下一个
then
函数之前解析承诺,因此您不必嵌套
then
调用:
获取(…)。然后(r=>r.json())。然后(d=>/*进程d*/)
是一种非常合适的处理方法。
.then( (response) => {
   if (response.status >= 200 && response.status < 300) {
      response.json().then((data) => success(data));
   } else {
      fail(response);
   }
})