在不调试时以承诺方式响应本机设置状态

时间:2018-09-17 22:19:34

标签: javascript reactjs react-native promise remote-debugging

我的应用程序出现一些奇怪的行为。 当我调试时,我的componentDidMount中的算法(由一长串承诺组成)在大多数情况下都可以正常工作。

但是,当我不进行调试时,出现了一个问题,当我在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){

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

有人对此有任何见识吗?

0 个答案:

没有答案