首页 > 解决方案 > 不调试时在 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){

当然,在已检索数据的算法的底部。

有人对此有任何见解吗?

标签: javascriptreactjsreact-nativepromiseremote-debugging

解决方案


推荐阅读