在循环链式异步等待之前,等待查询API返回

时间:2018-11-06 15:15:23

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

问题是我正在循环查找要在Firebase数据库中查询的数组,而不是等待该查询返回,即使未执行return promise,它也会继续循环。

下面的代码是这样执行的,如果用户输入它,则检查它是否存在,如果存在,它将查询实时数据库以获取通过注册保存的特定“数据”。

问题是它不会等待实时数据库中的查询,而是会立即循环然后执行错误的查询。我知道Firebase中的查询会返回一个函数,但是如何链接它呢?还是有什么方法可以轻松做到这一点?谢谢btw

loginIdentification = ['citizen','bfp','ndrmmc','pnp','rta'];

  loginAuthentication(email:any,password:any){
    this.loginFireAuth.signInWithEmailAndPassword(email, password).then(async authData =>{
      if(authData.uid){
        for (var counter = 0; counter < this.loginIdentification.length; counter++) {
          console.log('counter');
          await this.searchuser(counter,authData.uid);
        }
      }
      console.log(JSON.stringify(authData.uid));
    }).catch(function (error) {
      var errorCode = error.code;
      var errorMessage = error.message;
      console.log("error code : " + errorCode + " errorMessage : " + errorMessage);
      });
  }

  searchuser(counter,userid){
    var that = this;
      if(counter == 0){
          that.loginFiredatabase.ref('users/' + that.loginIdentification[counter] + '/' + userid).on('value',async function (snapshot) {
            await new Promise(function (resolve, reject) {
            if (snapshot.exists()) {
              console.log(JSON.stringify(snapshot));
              return resolve();
            }
            else{
              return reject();
            }
            });
          });
      }
      else {
          that.loginFiredatabase.ref('users/' + that.loginIdentification[counter] + '/' + userid).on('value',async function (snapshot) {
            await new Promise(function (resolve, reject) {
              if(snapshot.exists()) {
                console.log(JSON.stringify(snapshot));
                return resolve();
              }
              else {
                return reject();
              }
          });
    });
      }
  }

0 个答案:

没有答案