Предотвратить остановку цикла без результата из функции запроса. - PullRequest
0 голосов
/ 07 ноября 2018

Таким образом, я запрашиваю набор узлов в firebase, чтобы получить значение, зависит от того, существует ли введенный идентификатор, проблема в том, что после того, как функция вернет цикл for, цикл прекратится, хотя возвращение выйдет из цикла. Так что будет лучшим способом синхронного запроса данных без остановки цикла после вызова return. Надеюсь, что кто-то поможет фрагмент кода ниже прилагается

     loginIdentification = ['bfp','ndrmmc','pnp','rta'];
for (var counter = 0; counter < this.loginIdentification.length; counter++) { // loop the possible place of the data
              console.log('loop',counter);
              return this.loginFiredatabase.ref('users/' + this.loginIdentification[counter] + '/' + authData.uid).on('value', (snapshot) => { // authdata.uid is the id of the user
                console.log('await');
                  if(snapshot.exists()) {
                    console.log(JSON.stringify(snapshot));
                    return snapshot;
                  }
                  else {
                    console.log('not exists');
                  }
                });
              }

1 Ответ

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

Я думаю, вы пытаетесь найти первый идентификатор пользователя в массиве, который уже существует в базе данных. Если это так, это будет примерно так:

function findMatch(ids, callback) {
  var id = ids.shift;
  this.loginFiredatabase.ref('users/' + this.loginIdentification[counter] + '/' + authData.uid)
      .once('value', function(snapshot) {
        if (snapshot.exists()) {
          callback(snapshot);
        else if (ids.length > 0) {
          findMatch(ids, callback);
        }
        else {
          callback();
        }
      });
}

Хитрость этой функции в том, что она проверяет один идентификатор из массива за раз. Поскольку данные загружаются из Firebase асинхронно, они ждут, пока не получит результат, прежде чем пытаться выполнить следующий элемент.

Вы бы назвали это как:

findMatch(['bfp','ndrmmc','pnp','rta'], function(result) {
  if (result) {
    console.log("Found match: "+result.val());
  }
  else {
    console.log("No match found");
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...