Javascript 反应本机获取:第二个承诺挂起
React Native的获取出现奇怪的问题。 它以前是工作的,不知道我改变了什么,但它停止了工作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');
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);
}
})