У меня странное поведение с моим приложением.
Когда я отлаживаю, мой алгоритм в 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){
и, конечно, в нижней части алгоритма, в котором были получены данные.
У кого-нибудь есть понимание этого?