Подождите, пока запрос API вернется, прежде чем зацикливать цепочку асинхронного ожидания - PullRequest
0 голосов
/ 06 ноября 2018

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

Код ниже выполняется следующим образом: если пользователь вводит его, он проверяет, существует ли он, и если он существует, он запрашивает базу данных реального времени, чтобы получить определенные «данные», сохраненные после регистрации.

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

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();
              }
          });
    });
      }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...