React Native Fetch:第二个承诺挂起
React Native Fetch: second promise hanging
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()没有自动启动。
非常感谢您的帮助。
编辑:发现了一个类似的问题:是什么原因导致react native中的获取速度缓慢?
似乎已经在考虑了:https://github.com/facebook/react-native/issues/6679
此外,只有在启用Chrome调试工具时才能看到这种行为。。。有趣的
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);
}
})
console.log是一个阻塞语句。一个同步器,可以停止代码直到它被解决,但与Chrome Debug一起使用时,当选项卡不在前台时,它可能会很慢。
相关文章:
- JavaScript执行暂时挂起页面
- 是定义的操作系统睡眠/挂起期间setTimeout的行为
- Chrome浏览器“;挂起”;同时在循环中执行AJAX请求
- fullcalendar在删除导致浏览器挂起的多个事件时速度较慢
- 应用将图表转换为图像的jqplot代码时Chrome挂起
- $http中的Angular 1数据绑定承诺不起作用
- 如何在不使用Internet Explorer的情况下从未挂起的HTML文件执行程序
- MongoDB collection.find()查询挂起
- 角度控制器服务承诺不起作用
- 使用子字符串方法时应用程序挂起的原因
- 如何在AngularJS中取消挂起的请求
- 从node.js应用程序调用Mongoose Model.save()时挂起
- Chrome,Safari在从本地存储读取时挂起,而Firefox很好
- 在jQuery中,.state()如何确定一个承诺是挂起的、已解决的还是被拒绝的
- React Native Fetch:第二个承诺挂起
- Javascript-承诺保留为挂起状态
- 使用承诺时,最佳实践是挂起变量
- 如何防止嵌套承诺挂起
- 查看javascript中所有挂起的承诺
- 限制挂起承诺的并发性