Реагируйте на собственное состояние настройки в обещании, когда не отлаживаете - PullRequest
0 голосов
/ 18 сентября 2018

У меня странное поведение с моим приложением. Когда я отлаживаю, мой алгоритм в componentDidMount, который состоит из длинной цепочки обещаний, по большей части работает нормально.

Однако, когда я не отлаживаю, возникает проблема, когда я не могу установить состояние в обещаниях. Мой код имеет состояние «загрузки», которое меняется на «ложь», когда данные получены и мой вывод готов. Это состояние никогда не меняется.

Я частично обеспокоен тем, что firebaseApp.database (). Ref () ... никогда не вызывается. Но нет никакого способа сказать, поскольку я не устраняю неполадки. Есть ли способ узнать, входит ли функция без использования отладчика?

Я попытался установить setState ({loading: false}); на самом верху моего первого обещанного звонка, но даже тогда он не меняется. Если я помещаю вызов setState полностью за пределы цепочки обещаний, он работает, но я не могу поставить его там, поскольку данные еще не получены.

Однако при отладке с помощью Chrome это не проблема, и состояние меняется нормально. Я знаю, что есть некоторые различия между отладчиком и собственным интерпретатором, такими как: объекты Date и логические значения компаратора. Я не уверен, что проблема может быть здесь, хотя.

Код для справки:

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

The

let that = this;

потому что я не смог получить доступ к этому в обещаниях. Я попытался поставить состояние установки прямо под

let that= this;

, а также в пределах

firebaseApp.database().ref("Restaurant_Tags").orderByChild("Author_ID")
                      .equalTo("test").once('value').then(function(snap){

и, конечно, в нижней части алгоритма, в котором были получены данные.

У кого-нибудь есть понимание этого?

...