Angular7_获取异步方法里面的数据
1.回调函数
getName() {
return '张三';
}
getAsyncName() {
setTimeout(() => {
return 'async_张三';
}, );
}
这是我们定义好的两个函数,当调用这两个函数的时候,因为setTimeout是异步的,所以并不能正常返回值,补全返回类型可以使我们更加直观的看出效果。
getName(): string
getAsyncName(): void
这时候,要获取返回值,就需要使用回调函数,将getAsyncName()修改成
getAsyncName(back) {
setTimeout(() => {
back('async_张三');
}, );
}
调用
this.getAsyncName((data) => {
console.log(data);
}); 成功输出:async_张三
2.Promise处理异步
getPromiseData() {
return new Promise((success, error) => {
setTimeout(() => {
success('promise_张三');
}, );
});
} ps:error为失败回调函数,可以不写
调用
this.getPromiseData().then((data) => {
console.log(data);
});
3.Observable(集成在rxjs模块)
import { Observable } from 'rxjs';
getObservableData() {
return new Observable((obserber) => {
setTimeout(() => {
obserber.next('rxjs_张三');
}, );
});
} ps:失败回调为obserber.error('失败');
调用
this.getObservableData().subscribe((data) => {
console.log(data);
});
可见Promise和Observable非常相似
(Observable强大一点,可以取消订阅、循环监听、提供多种工具函数)
a.取消订阅
const d = this.getObservableData().subscribe((data) => {
console.log(data);
});
d.unsubscribe(); // 取消订阅
由于getObservableData方法是一秒后执行的,程序获得返回值之前执行了取消订阅,所以这里将不打印出结果
b.循环监听
先写一个异步循环函数,每隔一秒返回一个值
getObservable_Interval_Data() {
let i = ;
return new Observable((obserber) => {
setInterval(() => {
i++;
obserber.next('rxjs_张三_Interval_' + i);
}, );
});
}
调用
this.getObservable_Interval_Data().subscribe((data) => {
console.log(data);
});
结果:每隔一秒打印一个值
c.工具函数(pip管道,filter过滤器,map操作)
我们先写一个方法,从1开始递增打印
getObservable_Num_Data() {
let i = ;
return new Observable((obserber) => {
setInterval(() => {
i++;
obserber.next(i);
}, );
});
}
调用
this.getObservable_Num_Data().subscribe((data) => {
console.log(data);
});
好,这很容易,前面也提到过了,但是现在我们不改变原本的函数,但是只要打印偶数呢(对值进行筛选)
import { filter } from 'rxjs/operators';
修改函数如下:
this.getObservable_Num_Data()
.pipe(
filter((value: number) => {
if (value % === ) {
return true;
}
})
)
.subscribe((data) => {
console.log(data);
});
现在我们要打印值的二次幂呢(对值进行操作)
import { map } from 'rxjs/operators';
修改函数如下:
this.getObservable_Num_Data()
.pipe(
map((value: number) => {
return value * value;
})
)
.subscribe((data) => {
console.log(data);
});
还有,就是补充一点,pipe管道可以对值进行多次操作,用逗号隔开,执行顺序从上到下
如:
this.getObservable_Num_Data()
.pipe(
filter((value: number) => {
if (value % === ) {
return true;
}
}),
map((value: number) => {
return value * value;
}),
map((value: number) => {
return value * ;
})
)
.subscribe((data) => {
console.log(data);
});
Angular7_获取异步方法里面的数据的更多相关文章
- js获取异步方法里面的数据
这里介绍 五种方法(说白了本质 就三种) 1.callback回调函数 function getData(callback){ setTimeout(()=>{ let name = '哈哈 ...
- 如何用 ajax 连接mysql数据库,并且获取从中返回的数据。ajax获取从mysql返回的数据。responseXML分别输出不同数据的方法。
开讲前,先说下网上,大部分的关于这方面的博文或者其他什么的,就我自己的感觉,第一说得不详细,第二语言不能很好的被初学者了解. 我这篇博文的标题之所以用了三句,是为了方便其他人好查找: 这里介绍的方法有 ...
- .net dataGridView当鼠标经过时当前行背景色变色;然后【给GridView增加单击行事件,并获取单击行的数据填充到页面中的控件中】
1.首先在前台dataGridview属性中增加onRowDataBound属性事件 2.然后在后台Observing_RowDataBound事件中增加代码 protected void Obser ...
- django获取指定列的数据
django获取指定列的数据 model一般都是有多个属性的,但是很多时候我们又只需要查询特定的某一个,这个时候可以用到values和values_list [values()](https://do ...
- 传递多个参数并获取Web API的数据
近段时间学习Web Api觉得非常有意思.默认的路由情况之下,获取数据时,它不必指定Action操作名. 还有另外感想,就是自从学习asp.net MVC之后,加上jQuery,让Insus.NET已 ...
- 存储过程获取最后插入到数据表里面的ID
存储过程获取最后插入到数据表里面的ID SET NOCOUNT on;---不返回影响行数提高性能GOcreate proc [sp_bbs_thread_Insert] @id int output ...
- Path形状获取字符串型变量数据
Path形状获取字符串型变量数据: var path = new Path(); path.Data = Geometry.Parse("M 100,200 C 100,25 400,350 ...
- 使用所见即所得文本编辑器编辑文本存入数据库后通过ajax获取服务器json_encode的数据到前台,文本内容上边的html标签不解析
使用所见即所得文本编辑器编辑文本存入数据库后通过ajax获取服务器json_encode的数据到前台,文本内容上边的html标签不解析 因为我在前台使用了jquery的text()方法,而不是html ...
- 动态获取ul,li的数据
通过一个小例子讲下动态获取li标签的数据,前台页面原有样式: <div class="flone"> <ul class="fltwo"> ...
随机推荐
- websocket 实现单聊群聊 以及 握手原理+加密方式
WebSocket 开始代码 服务端 群聊 # type:WebSocket 给变量标注类型 # websocket web + socket from geventwebsocket.server ...
- Ubuntu 下重启网络的方法
命令是: sudo /etc/init.d/networking restart 但是可能会遇到下面的提示: Running /etc/init.d/networking restart is dep ...
- loadrunner迭代和并发的区别
转载: ZEE的回答: 用比喻的方式来回一下: 四车道的马路,如果只有四辆车并排走过就是并发: 如果四辆车排成一纵队走过就是迭代: 如果有100辆车排成25行依次走过就是并发加迭代. 在以上说法中,只 ...
- CF1012B Chemical table
$CF1012B Chemical table 给你一个 \(n\times m\) 的矩形,一开始有 \(q\) 个格子上被标记.对于任意两行两列,如果交汇的四个格子中有三个被标记,那么第 \(4\ ...
- asp.net webapi中helppage
今天研究了下webapi,发现还有自动生成接口说明文档提供测试的功能 参考:https://docs.microsoft.com/en-us/aspnet/web-api/overview/getti ...
- 20分钟了解Epoll + 聊天室实战
我们知道,计算机的硬件资源由操作系统管理.调度,我们的应用程序运行在操作系统之上,我们的程序运行需要访问计算机上的资源(如读取文件,接收网络请求),操作系统有内核空间和用户空间之分,所以数据读取,先由 ...
- FM算法解析及Python实现
1. 什么是FM? FM即Factor Machine,因子分解机. 2. 为什么需要FM? 1.特征组合是许多机器学习建模过程中遇到的问题,如果对特征直接建模,很有可能会忽略掉特征与特征之间的关联信 ...
- 【学习总结】Git学习-参考廖雪峰老师教程-总
公元2018-10-21 实验室台式机 win7 64位 参考教程: 廖雪峰Git教程 其他资料:Git-book 北大一只总结的笔记,最终整理的时候可以参考:Git笔记 评论区看到的另一个人,总结在 ...
- ST表
ST表的原理及其实现 ST表类似树状数组,线段树这两种算法,是一种用于解决RMQ(Range Minimum/Maximum Query,即区间最值查询)问题的离线算法 与线段树相比,预处理复杂度同为 ...
- 6-3 Articles(a, an, some, the)
1 Definite and Indifinite articles Indefinite articles: a, an, some Definite article: the 2 a and t ...