Функции Firebase - получение значения по недействительной ссылке не обнаружено - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть две ссылки, такие как:

  var receiverMaleRef = admin.database().ref(`root/users/male/${currentUser}`);
  var receiverFemaleRef = admin.database().ref(`root/users/female/${currentUser}`);

'currentUser' является уникальным в целом, т.е. одно и то же имя не может существовать на обоих узлах.

И я использую следующиекод для получения значений:

return receiverMaleRef.once('value').then(function(maleDataSnapshot) { 

})
.catch(err => {

   //if currentUser is not male catch should be called because of invalid reference
   //Get value from female node   
   return receiverFemaleRef.once('value').then(function(dataSnapshot) { 

   })

});

Проблема, с которой я сталкиваюсь, заключается в том, что если 'currentUser' является самкой, она не улавливает ошибку, вместо этого она возвращает нуль в maleDataSnapshot .

Каким должно быть решение этой проблемы?

1 Ответ

0 голосов
/ 16 ноября 2018

Если вы хотите уловить тот факт, что maleDataSnapshot является нулевым (т.е. не существует) с вашим кодом, вы можете использовать метод exists() и сделать следующее:

return receiverMaleRef.once('value').then(function(maleDataSnapshot) { 
   if (!maleDataSnapshot.exists()) {
       throw new Error('currentUser is not male');
   }
})
.catch(err => {

   //if currentUser is not male catch should be called because of invalid reference
   //Get value from female node   
   return receiverFemaleRef.once('value').then(function(dataSnapshot) { 

   })

});

Однако не рекомендуется использовать перехват ошибок для реализации вашей бизнес-логики . Вы можете изменить свой код функции облака с помощью if / then / else. Трудно дать совет, как это сделать, не видя полного кода функции облака (т. Е. Общую логику, тип триггера, что он возвращает в конце и т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...