Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何防止React Native在es6承诺上结巴?_Javascript_React Native_Realm_Es6 Promise - Fatal编程技术网

Javascript 如何防止React Native在es6承诺上结巴?

Javascript 如何防止React Native在es6承诺上结巴?,javascript,react-native,realm,es6-promise,Javascript,React Native,Realm,Es6 Promise,我在和Realm DB合作。当我处理来自本机模块的回调和承诺时(从结果或订阅中添加_侦听器),我的UI卡住了,即使我可以从js控制台看到正确完成的日志,UI也只有在交互之后才会更新(更具体地说,当我点击屏幕时) 我注意到两种不同的行为: 1) 当我在对象或结果对象上添加侦听器时,有时会触发侦听器回调中的setState,但出现上述问题 2) 当我等待检查某个查询的订阅是否完成的承诺时,我需要点击甚至查看日志。在本例中,我使用此代码(代码1) 对于我尝试的第一个问题: 1) 将setState包含

我在和Realm DB合作。当我处理来自本机模块的回调和承诺时(从结果或订阅中添加_侦听器),我的UI卡住了,即使我可以从js控制台看到正确完成的日志,UI也只有在交互之后才会更新(更具体地说,当我点击屏幕时)

我注意到两种不同的行为:

1) 当我在对象或结果对象上添加侦听器时,有时会触发侦听器回调中的setState,但出现上述问题

2) 当我等待检查某个查询的订阅是否完成的承诺时,我需要点击甚至查看日志。在本例中,我使用此代码(代码1)

对于我尝试的第一个问题:

1) 将setState包含在setTimeout、setImmediate-不工作的回调中

你可以在这里了解第一个问题

可能相关:

第二个问题是一个新问题,所以我正在调查

代码1

susbscribeAndSyncTo = async (object) => {


    // Aggiungo dei listeners per controllare quando la sincronizzazione sarà completata
    console.log("Recupero i dati dal server")
    var subscription = object.subscribe()

    return new Promise((resolve, reject) => {
      console.log("Imposto un listener sulla sottoscrizione")
      subscription.addListener((subscription, state) => {
        console.log("La sottoscrizione è in fase", state)
        if (this.checkSubscriptionState(state, 'user_data')) {
          console.log("La sincronizzazione è completa. rimuovo i listener dalla sottoscrizione e ritorno la promessa", state)
          subscription.removeAllListeners()
          resolve(true);
        }
      })

    });

  }
Thaks为了寻求帮助

对于问题(2),我这样解决了

susbscribeAndSyncTo = async (object) => {


// Aggiungo dei listeners per controllare quando la sincronizzazione sarà completata
console.log("Recupero i dati dal server")
var subscription = object.subscribe()

return new Promise((resolve, reject) => {
  console.log("Imposto un listener sulla sottoscrizione")
  subscription.addListener((subscription, state) => {
    console.log("La sottoscrizione è in fase", state)
    if (this.checkSubscriptionState(state, 'user_data')) {
      console.log("La sincronizzazione è completa. rimuovo i listener dalla sottoscrizione e ritorno la promessa", state)
      subscription.removeAllListeners()
      setTimeout(() => null, 0);  // THIS IS THE WORKAROUND
      resolve(true);
    }
  })

});
}

感谢这篇文章,我做到了:

我将检查此解决方案是否也解决了(1),但我对此有信心

更新

它还解决了(1)

对于问题(2),我用这种方法解决了

susbscribeAndSyncTo = async (object) => {


// Aggiungo dei listeners per controllare quando la sincronizzazione sarà completata
console.log("Recupero i dati dal server")
var subscription = object.subscribe()

return new Promise((resolve, reject) => {
  console.log("Imposto un listener sulla sottoscrizione")
  subscription.addListener((subscription, state) => {
    console.log("La sottoscrizione è in fase", state)
    if (this.checkSubscriptionState(state, 'user_data')) {
      console.log("La sincronizzazione è completa. rimuovo i listener dalla sottoscrizione e ritorno la promessa", state)
      subscription.removeAllListeners()
      setTimeout(() => null, 0);  // THIS IS THE WORKAROUND
      resolve(true);
    }
  })

});
}

感谢这篇文章,我做到了:

我将检查此解决方案是否也解决了(1),但我对此有信心

更新


它还解决了(1)

在您的代码示例中,我没有看到任何
wait
。你确定这是正确的代码吗?@SerShubham这是我正在等待的函数。根据你链接到的第二个(可能是相关的)主题,你检查过应用程序未处于调试模式吗?回答(1)是。它不起作用…对于(2)我将立即检查。在您的代码示例中,我没有看到任何
正在等待。你确定这是正确的代码吗?@SerShubham这是我正在等待的函数。根据你链接到的第二个(可能是相关的)主题,你检查过应用程序未处于调试模式吗?回答(1)是。我会马上检查的。该死,对我不起作用。还有其他与此相关的提示吗?该死,对我不起作用。还有其他与此相关的提示吗?