【发布时间】:2019-06-23 16:26:07
【问题描述】:
我正在使用 Realm DB。当我使用来自本机模块(add_listener,来自结果或订阅)的回调和承诺时,我的 UI 卡住了,即使我可以看到来自 js 控制台的日志正确完成,UI 也只会在交互后更新(更具体地说,当我点击屏幕)
我注意到两种不同的行为:
1) 当我在对象或结果对象上添加侦听器时,有时会触发侦听器回调中的 setState,但会出现上述问题
2) 当我等待承诺检查某个查询的订阅是否完成时,我需要点击甚至查看日志。在这种情况下,我使用此代码(CODE1)
对于我尝试的第一个问题:
1) 在 setTimeout 的回调中包含 setState,setImmediate - NOT WORKING
你可以在这里阅读第一个问题
UI doesn't update until tap on the screen when setState is called inside a realm listener callback
https://github.com/realm/realm-js/issues/2371
可能相关:
React Native Fetch does not render response until after clicking screen
第二个问题是新问题,所以我正在调查
代码 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);
}
})
});
}
谢谢你的帮助
【问题讨论】:
-
我在您的代码示例中没有看到任何
await。你确定这是正确的代码吗? -
@SerShubham 这是我等待的功能
-
您是否按照您链接到的每秒(可能相关)主题检查了应用程序未处于调试模式吗?
-
对于 (1) 是的。它不起作用......对于(2)我会立即检查。
标签: javascript react-native realm es6-promise