Как я могу запустить функцию после того, как метод get завершает выборку информации в Angular? - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть функция get, которая извлекает данные из моего mongodb.Функция GET для запуска занимает несколько секунд.Между тем, функция, которая должна запускаться дальше и работать с массивом извлеченных объектов, не ждет массива и запускается с ошибкой.Можно ли как-нибудь запустить функцию, когда моя функция GET завершит выполнение?

downloadVMclicked запускается всякий раз, когда я нажимаю кнопку загрузки на моей странице.

downloadVMclicked(ctype){
     console.log("ctype ="+ctype)
     var vms= new Array<VM>();
     vms=[]
    this.clusters.forEach(element => {
      if(element.ctype==ctype)
      {
        this.inventoryService.getVMdownload(element.cname).subscribe(vmD =>{
          console.log("Concating this.vms "+vms+" vmDownload "+vmD)
          vms=vms.concat(vmD)
          console.log("vms length is"+vms.length)
          if(vms!=null)
          {
            console.log("VM downloaded for "+element.cname)
            console.log(vms)
          } 
          else
            console.log("VM not downloaded for "+element.cname)
        })
      }
    })
    this.download(vms);
   }

download(array){    
    console.log("Downloading "+ array.length+" items")
    var csvData = this.ConvertToCSV(array);
    var time = new Date();
    var a = document.createElement("a");
    a.setAttribute('style', 'display:none;');
    document.body.appendChild(a);
    var blob = new Blob([csvData], { type: 'text/csv' });
    var url= window.URL.createObjectURL(blob);
    a.href = url;
    a.download = 'vmAll '+time.toString()+'.csv';/* your file name*/
    a.click();
    return 'success';
   }

1 Ответ

0 голосов
/ 24 сентября 2018

Проверьте, достигнут ли результат, если да, создайте новое обещание и заполните его результатом.

httpGet(url) {
    if(result === undefined) {
      return this.http.get(url).toPromise().then(
          result => this.result = result.json(),
          error => console.log(error);
      );
    } else {
      return new Promise().resolve(result);
    }
}
...