热门标签 | 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;
}

推荐阅读
  • 手把手教你构建简易JSON解析器
    本文将带你深入了解JSON解析器的构建过程,通过实践掌握JSON解析的基本原理。适合所有对数据解析感兴趣的开发者。 ... [详细]
  • 本文详细探讨了在Windows Server 2003环境下遇到MySQL连接失败(错误代码10061)的解决方案,包括通过卸载特定的Windows更新和调整系统注册表设置的方法。 ... [详细]
  • 本文介绍了如何在三台CentOS 7.5虚拟机上通过Docker部署RabbitMQ集群,包括环境准备、容器创建、集群配置及故障处理等内容。 ... [详细]
  • Shiro功能拓展:登录失败重试次数限制
    本文详细介绍了如何在Apache Shiro框架中实现对用户登录失败重试次数的限制,通过自定义密码匹配器来增强系统的安全性。该方法不仅能够有效防止暴力破解攻击,还能确保合法用户的账户安全。 ... [详细]
  • 本文档详细介绍了Robot Framework的基础知识、安装配置方法及其实用技巧。从环境搭建到编写第一个测试用例,涵盖了一系列实用的操作指南和最佳实践。 ... [详细]
  • 应用程序配置详解
    本文介绍了配置文件的关键特性及其在不同场景下的应用,重点探讨了Machine.Config和Web.Config两种主要配置文件的用途和配置方法。文章还详细解释了如何利用XML格式的配置文件来调整应用程序的行为,包括自定义配置、错误处理、身份验证和授权设置。 ... [详细]
  • 本文通过一个实际案例,详细介绍了如何使用Excel VBA和FSO(FileSystemObject)对象来提取指定文件夹中的所有文件名称,并将其以超链接的形式添加到Excel表格中。 ... [详细]
  • 本文探讨了为何采用RESTful架构及其优势,特别是在现代Web应用开发中的重要性。通过前后端分离和统一接口设计,RESTful API能够提高开发效率,支持多种客户端,并简化维护。 ... [详细]
  • 重构:优化现有代码设计(第二版)笔记
    本文介绍了重构的基本概念,通过具体示例展示了如何提炼函数以处理过长的代码段,并探讨了多种重构技术,如分阶段重构、封装变量等。 ... [详细]
  • 本文详细介绍了C++标准模板库(STL)中各容器的功能特性,并深入探讨了不同容器操作函数的异常安全性。 ... [详细]
  • 首先说一下,这是我在CSDN上的第一个文章,其实这个账号早在几年前就申请了,不过当时只是为了下载一个资源,而且也不怎么懂信息技术相关的领域,后来就再也没怎么动过,直到今天我才开始使用这个账号 ... [详细]
  • 本文探讨了如何利用ES6提供的新功能来更改JavaScript对象中的属性名,特别是当需要将API返回的数据格式化为特定组件所需的格式时。 ... [详细]
  • OpenWrt 是一款高度可定制的嵌入式 Linux 发行版,广泛应用于无线路由器等领域,拥有超过百个预装软件包。本文详细探讨如何在 OpenWrt 上通过 Luci 构建自定义模块,以扩展其功能。 ... [详细]
  • UnityNGUIScrollView苹果式滑动
    又回来写博客了,这回已经开始上班了,所以就发一发工作中解决的难题吧。单个展示Panel(苹果式)以前对UI的滑动组件很烦心,不是很会用,这回项目要求写一个类似于苹果的文件滑动效果, ... [详细]
  • 开发笔记:新手DVWACSRF
    开发笔记:新手DVWACSRF ... [详细]
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社区 版权所有