Я работаю с Realm DB.Когда я работаю с обратными вызовами и обещаниями из собственного модуля (add_listener, как из результатов, так и из подписок), мой пользовательский интерфейс зависает, и, даже если я вижу журналы с консоли js, все делается правильно, пользовательский интерфейс обновляется только после взаимодействия (более конкретно, когдаЯ нажимаю на экран)
Я заметил два разных поведения:
1) Когда я добавляю слушателя к объекту или объекту результатов, ИНОСТРАННЫЙ setState в обратном вызове слушателя, он запускается, нопроблема выше
2) Когда я жду обещания проверить, завершена ли подписка на определенный запрос, мне нужно нажать даже, чтобы увидеть, как продолжаются журналы.В этом случае я использую этот код (CODE1)
Для первой проблемы, которую я попытался:
1) Включить setState в обратный вызов в setTimeout, setImmediate - NOT WORKING
Вы можете прочитать о первой проблеме здесь
Пользовательский интерфейс не обновляется до тех пор, пока не коснитесь экрана, когда setState вызывается внутри обратного вызова слушателя области
https://github.com/realm/realm-js/issues/2371
Может быть связано:
React Native Fetch не выдает ответ до тех пор, пока не нажмете экран
Вторая проблема - новая, поэтому я занимаюсь расследованием
КОД 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);
}
})
});
}
Спасибо за помощь