I have a button that makes an http.get on click, and then displays some data, although my async/awaits seem to not be synchronized correctly.
For a reason I haven't quite figured out yet, this.tabRows = file.contents will be called before loadDateFolderFileContents() completes. Am I missing an await somewhere?
async ngAfterViewInit() { if (!this.drawn) { if(!file.contents){ await this.dataLakeService.loadDateFolderFileContents(file.parentFolder); } this.tabRows = file.contents; this.redraw(); } } public async loadDateFolderFileContents(dateFolder: folder) { await date.files.map(async file => { file.contents = await this.getFileContents(dateFolder.name, file.name); }); } public async loadDateFolderFileContents(dateName: string, fileName: string): Promise<any> { var url = this.buildUrl(dateName, fileName); var fileContents = {}; await this.http.get<any>(url).toPromise() .then(contents => { fileContents = contents; }) .catch(e => { console.log(`Error retreiving file contents from url ${url}. Exception:${e}`); }); return fileContents; }
return fileContents;--> Does this answer your question? How do I return the response from an asynchronous call?.thenwhich won't be waited for. just let content = await this.http.get .... and put it in a try catch