javascript - 不调试时在 Promise 中反应 Native 设置状态
问题描述
我的应用程序有一些奇怪的行为。当我调试时,我在 componentDidMount 中的算法(由一长串 Promise 组成)在大多数情况下都可以正常工作。
但是,当我不调试时,会出现一个问题,即我无法在 Promise 中设置状态。我的代码有一个“加载”状态,当检索到数据并且我的输出准备就绪时,该状态变为 false。这种状态永远不会改变。
我部分担心 firebaseApp.database().ref()... 永远不会被调用。但是没有办法告诉我,因为我没有调试。有没有办法在不使用调试器的情况下查看函数是否被单步执行?
我试过放一个 setState({loading:false}); 在我第一次承诺电话的最顶端,但即使那样它也没有改变。如果我将 setState 调用完全放在 Promise 链之外,它确实可以工作,但我不能把它放在那里,因为尚未检索到任何数据。
但是,当使用 chrome 进行调试时,这不是问题,并且状态变化良好。我知道调试器和本机解释器之间存在一些差异,例如:日期对象和比较器布尔值。我不确定这里可能存在什么问题。
一些代码供参考:
let that = this;
firebaseApp.database().ref("Restaurant_Tags").orderByChild("Author_ID")
.equalTo("test").once('value').then(function(snap){
if(snap.val() != null){
that.setState({loading:false});
firebaseApp.database().ref("Restaurant_Tags").orderByChild("Author_ID")
.equalTo("test").once('value').then(function(snap){
. . . etc
这
let that = this;
是因为我无法在承诺中访问它。我试过把设置状态直接放在下面
let that= this;
并且还在
firebaseApp.database().ref("Restaurant_Tags").orderByChild("Author_ID")
.equalTo("test").once('value').then(function(snap){
当然,在已检索数据的算法的底部。
有人对此有任何见解吗?
解决方案
推荐阅读
- javascript - 附加值未获取
- java - Composite 和 ScrolledComposite 占用了不必要的空间
- java - Talend Build Job - 编译问题
- python - python pandas agg和count在同一行
- azure-devops - Azure devops,继承的进程,无法添加新的完成状态 VS403093
- jquery - Highchart 在顶部位置显示标记
- ios - 如何从 ARDirectionalLightEstimate 获取主光强度等值
- java - 为什么整数比较会给出错误的结果?
- amazon-s3 - S3 Bucket 非加密 HLS 有效,但 CloudFront 无效
- apache-spark - Spark SQL 中使用的嵌套 java bean