防止在没有查询功能Firebase结果的情况下停止循环

时间:2018-11-07 14:35:48

标签: javascript typescript firebase ionic-framework firebase-realtime-database

因此,我查询了Firebase中的一组节点,以获取值取决于输入的id是否存在,这里的问题是在函数返回for循环停止循环之后,尽管返回将退出循环。因此,在调用返回后不停止循环的情况下,同步查询数据的最佳方法是什么。希望有人帮助下面的代码段

     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 :(得分:0)

我认为您正在尝试在数据库中已经存在的数组中查找第一个用户标识。如果是这样,那就是这样的:

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();
        }
      });
}

此功能的窍门是它一次检查数组中的一个ID。由于数据是从Firebase异步加载的,因此它会一直等到获得结果后再尝试下一项。

您可以这样称呼它:

findMatch(['bfp','ndrmmc','pnp','rta'], function(result) {
  if (result) {
    console.log("Found match: "+result.val());
  }
  else {
    console.log("No match found");
  }
}