Ионное ожидание завершения метода перед продолжением - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть следующий метод.

 async getuserdevicesIDs() {
  let timesDone = 0;
  // tslint:disable-next-line: no-var-keyword
  const viewDevicesLink = '/user/devices/view/'; // parameter: email
  const xhr = new XMLHttpRequest();
  // xhr.open('POST', this.AUTH_SERVER_ADDRESS + '/user/devices/view/', true);
  xhr.open('POST', this.AUTH_SERVER_ADDRESS  + viewDevicesLink, true);

  xhr.setRequestHeader('Content-type', 'application/JSON;charset=UTF-8');
  console.log(this.auth.getUserID());
  const email = this.auth.getUserID().toString();
  const us = new User();
  us.name = '';
  us.email = 'richard@gmail.com';
  us.password = '';


  xhr.send(JSON.stringify(us));

  xhr.addEventListener('readystatechange', processRequest, false);

  xhr.onreadystatechange = processRequest;

  function processRequest(e) {
      // tslint:disable-next-line: triple-equals
      if (xhr.readyState == 4 && xhr.status == 200) {
          // tslint:disable-next-line: triple-equals
          if (timesDone == 0) {
              // tslint:disable-next-line: prefer-const
              const response  = xhr.response;
              timesDone++;
              return response;

          }
      // tslint:disable-next-line: triple-equals
      } else if (xhr.readyState == 4) {
          alert('server error: ' + xhr.status + ', response is: ' + xhr.responseText);
          timesDone++;
          return null;
      }

  }

} 

, который работает нормально, но когда я вызываю метод, подобный этому

 var IDs = await this.getuserdevicesIDs();
  alert(IDs[0]); 

, тогда предупреждение срабатывает до завершения метода getuserdevicesIDs (), даже если я его жду.Любая идея о том, как я могу заставить предупреждение ждать завершения метода?Спасибо за любую помощь

1 Ответ

0 голосов
/ 26 сентября 2019

Попробуйте вернуть Promise внутри функции getuserdevicesIDs (), как это

async getuserdevicesIDs() {
     return await new Promise((resolve, reject) => {
     //your code here ...
     resolve(value); // when you want to return a value in promise
     }
}

Когда вы хотите вызвать метод

this.getuserdevicesIDs().then(response => {}).catch(err => {});
...