热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为什么Javascript/Angular在继续运行之前不让此功能完成?

我在组件中有一个函数,该函数调用服务以获取http响应。在以下方法(调用服务)中:

我在组件中有一个函数,该函数调用服务以获取http响应。在以下方法(调用服务)中:

getSearchResults() {
let result = this.service.getSearchResults(this.searchValues,this.ITEMSPERPAGE);
console.log(result);
}

它正在继续执行console.log,直到结果从被调用函数返回。为什么调用此方法(getSearchResults)不是同步操作(即使被调用的方法执行异步http动作,也要等到完成后才返回)。另外,建议使用什么方法来处理此问题,以便在继续操作之前返回结果?

getSearchResults(searchValues,itemsPerPage : number,page : number = 1) {
let results = {
studentList: null,errorResult: null,pages: null,totalPages: null
};
let searchCriteriOns= {};
Object.keys(searchValues).forEach(a => {
if (searchValues[a] != null && searchValues[a] != '') {
searchCriterions[a] = searchValues[a];
}
}
);
searchCriterions['itemsPerPage'] = itemsPerPage.toString();
searchCriterions['page'] = page;
this.httpClient.get("http://localhost:8080/data/alumni/search",{
params: searchCriterions
}).subscribe(data => {
results.studentList = data;
if (page == 1) {
this.httpClient.get("http://localhost:8080/data/alumni/search/pageCount",{
params: searchCriterions
}).subscribe(data => {
results.pages = Array(Math.ceil(data['pageCount'] / itemsPerPage));
results.totalPages = results.pages.length;
console.log(results);
return results;
},error =>
{
results.errorResult = error;
return results;
});
}
else {
return results;
}
},error =>
{
results.errorResult = error;
return results;
});
}


Javascript直到API完成后才会停止,因此仅在API返回/完成后,才应使用promises来获得结果。这是一个示例:

search(term:string) {
let promise = new Promise((resolve,reject) => {
let apiURL = `${this.apiRoot}?term=${term}&media=music&limit=20`;
this.http.get(apiURL)
.toPromise()
.then(
res => { // Success
console.log(res.json());
resolve();
}
);
});
return promise;
}

推荐阅读
author-avatar
imjob1234_34706
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有