Правильно прервать цикл forEach - PullRequest
0 голосов
/ 21 апреля 2019

Итак, у меня есть функция в моем собственном приложении реагирования, которая должна проверять код, введенный пользователем, и сравнивать его с кодом в базе данных firebase-realtime-database.В настоящее время я использую цикл forEach для циклического прохождения кода в БД и сравниваю их с введенным кодом.Проблема в том, что оператор return, похоже, не влияет на этот сегмент кода, и он всегда выполняется до конца.Я абсолютный новичок в этом, поэтому, если есть лучший способ сделать это, я полностью открыт.Вот проблемный код:

function checkCode(text) {
   var code = text;
   codesRef.once('value', function(db_snapshot) {
      db_snapshot.forEach(function(code_snapshot) {
      if (code == code_snapshot.val().value) {
         console.log("Authentication Successful!");
           // break; // throws error
           return; // Does not seem to stop the code segment
      }
   })
   console.log("Authentication Failed!"); // This still runs, even on success...
   //AlertIOS.alert("We're Sorry...", "The code you entered was not found in the database! Please contact Mr. Gibson for further assistance.")
   });
}

Код моего AccessForm.js приведен ниже, и я открыт для любых предложений, даже если это не связано с проблемой forEach.

DropBox: AccessForm

1 Ответ

1 голос
/ 21 апреля 2019

Как только вы начнете цикл с DataSnapshot.forEach() в Firebase, вы не сможете его прервать.Это означает, что вы должны зафиксировать состояние вашей проверки в переменной, а затем использовать его после завершения цикла, чтобы определить, что печатать.

Так что-то вроде:

codesRef.once('value', function(db_snapshot) {
  let isUserFound = false
  db_snapshot.forEach(function(code_snapshot) {
    if (code == code_snapshot.val().value) {
      isUserFound = true
    }
  })
  console.log("Authentication " + isUserFound ? "Successful!" : "Failed!");
});

В случае, если вы хотите вернуть значение из checkCode (что является обычным следующим шагом), вы, возможно, захотите уже прочитать: JavaScript - значение Firebase для глобальной переменной

...