簡體   English   中英

如何防止React Native卡在es6 Promises上?

[英]How to prevent React Native from stucking on es6 Promises?

我正在使用Realm DB。 當我處理來自本機模塊(add_listener,既來自結果還是訂閱)的回調和promise時,我的UI卡住了,即使我可以從js控制台看到日志,說明事情已正確完成,該UI也僅在交互后才更新(更具體地說,我在屏幕上點擊)

我注意到兩種不同的行為:

1)當我在對象或結果對象上添加偵聽器時,有時會觸發偵聽器回調中的setState,但會發生上述問題

2)當我等待檢查某個查詢的預訂是否完成時,我什至需要點擊以查看日志繼續。 在這種情況下,我使用此代碼(CODE1)

對於第一個問題,我嘗試了:

1)將setState包含在setTimeout,setImmediate的回調中-不起作用

您可以在這里閱讀有關第一個問題的信息

在領域偵聽器回調中調用setState時,直到點擊屏幕,UI才會更新

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);
        }
      })

    });

  }

感謝幫助

對於問題(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);
    }
  })

});

}

我非常感謝這篇文章:

https://github.com/facebook/react-native/issues/6679

我將檢查此變通辦法是否還能解決(1),但我對此有信心

更新

它也解決(1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM