【发布时间】:2019-02-27 14:48:36
【问题描述】:
我有一个从我的 mongodb 获取数据的 get 函数。 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';
}
【问题讨论】:
-
如何获取数据?分享您的代码以供我们理解
-
当然:
service.get().subscribe(array => doSomethingWithTheArray(array)) -
编辑您的帖子以添加代码;)
-
你的数据不可能到达this.dowload。因为您首先使用 loop,然后使用 subscribe。 loop 总是 faster 然后 subscribe 所以 vms 的数据永远不会到达或部分到达。您只需要更改代码并找出更好的方法。这可以是一个选项stackoverflow.com/questions/44752086/…
标签: angular asynchronous get