在get方法完成Angular中的信息获取后,如何运行函数?

时间:2018-09-24 05:59:41

标签: angular asynchronous get

我有一个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 :(得分:0)

检查结果是否已经到达,如果是,则创建一个新的Promise并用结果完成它。

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