1.回调函数

  getName() {
return '张三';
}
getAsyncName() {
setTimeout(() => {
return 'async_张三';
}, );
}

  这是我们定义好的两个函数,当调用这两个函数的时候,因为setTimeout是异步的,所以并不能正常返回值,补全返回类型可以使我们更加直观的看出效果。

  getName(): string
getAsyncName(): void
  console.log(this.getName());   //输出:张三
  console.log(this.getAsyncName());   //输出:undefined

  这时候,要获取返回值,就需要使用回调函数,将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_获取异步方法里面的数据的更多相关文章

  1. js获取异步方法里面的数据

    这里介绍  五种方法(说白了本质 就三种) 1.callback回调函数  function getData(callback){ setTimeout(()=>{ let name = '哈哈 ...

  2. 如何用 ajax 连接mysql数据库,并且获取从中返回的数据。ajax获取从mysql返回的数据。responseXML分别输出不同数据的方法。

    开讲前,先说下网上,大部分的关于这方面的博文或者其他什么的,就我自己的感觉,第一说得不详细,第二语言不能很好的被初学者了解. 我这篇博文的标题之所以用了三句,是为了方便其他人好查找: 这里介绍的方法有 ...

  3. .net dataGridView当鼠标经过时当前行背景色变色;然后【给GridView增加单击行事件,并获取单击行的数据填充到页面中的控件中】

    1.首先在前台dataGridview属性中增加onRowDataBound属性事件 2.然后在后台Observing_RowDataBound事件中增加代码 protected void Obser ...

  4. django获取指定列的数据

    django获取指定列的数据 model一般都是有多个属性的,但是很多时候我们又只需要查询特定的某一个,这个时候可以用到values和values_list [values()](https://do ...

  5. 传递多个参数并获取Web API的数据

    近段时间学习Web Api觉得非常有意思.默认的路由情况之下,获取数据时,它不必指定Action操作名. 还有另外感想,就是自从学习asp.net MVC之后,加上jQuery,让Insus.NET已 ...

  6. 存储过程获取最后插入到数据表里面的ID

    存储过程获取最后插入到数据表里面的ID SET NOCOUNT on;---不返回影响行数提高性能GOcreate proc [sp_bbs_thread_Insert] @id int output ...

  7. Path形状获取字符串型变量数据

    Path形状获取字符串型变量数据: var path = new Path(); path.Data = Geometry.Parse("M 100,200 C 100,25 400,350 ...

  8. 使用所见即所得文本编辑器编辑文本存入数据库后通过ajax获取服务器json_encode的数据到前台,文本内容上边的html标签不解析

    使用所见即所得文本编辑器编辑文本存入数据库后通过ajax获取服务器json_encode的数据到前台,文本内容上边的html标签不解析 因为我在前台使用了jquery的text()方法,而不是html ...

  9. 动态获取ul,li的数据

    通过一个小例子讲下动态获取li标签的数据,前台页面原有样式: <div class="flone"> <ul class="fltwo"> ...

随机推荐

  1. 转://linux下的CPU、内存、IO、网络的压力测试工具与方法介绍

    转载地址:http://wushank.blog.51cto.com/3489095/1585927 一.对CPU进行简单测试: 1.通过bc命令计算特别函数 例:计算圆周率 echo "s ...

  2. 【Atcoder Grand Contest 011 F】Train Service Planning

    题意:给\(n+1\)个站\(0,\dots,n\),连续的两站\(i-1\)和\(i\)之间有一个距离\(A_i\),其是单行(\(B_i=1\))或双行(\(B_i=2\)),单行线不能同时有两辆 ...

  3. rocketmq双主模式

    1.官网 https://rocketmq.apache.org/ 官方安装文档 https://rocketmq.apache.org/docs/quick-start/ 2.rocketmq多主配 ...

  4. DAY16、模块和包

    一.模块 1.模块的加载顺序:内存 =>内置 =>sys.path(一系列自定义模块) 2.sys.path:环境变量,存放文件路径的列表 重点:默认列表第一个元素就是当前被执行文件所在的 ...

  5. python如何安装pip及venv管理

    问题1:如何安装pip python的虚拟环境virtualenv的管理 背景: (1)python的版本很多,每个应用项目可能需要使用不同的版本,这样会导致兼容性问题: python的插件相当的丰富 ...

  6. [ffmpeg] 音频样本

    不仅限于ffmpeg,音频采样所得的PCM都含有三个要素:声道(channel).采样率(sample rate).样本格式(sample format). 声道 当人听到声音时,能对声源进行定位,那 ...

  7. VS界面控件大小调整

    vs2015 ,配置名称显示不全,怎么才能把这个搞宽? 这个问题困扰时间挺长了, 对vs的应用仅限于敲代码.编译, 其他的功能了解甚少, 于是试着在右键菜单中找到了界面自定义窗口, 如下: 找到想要修 ...

  8. poj 3764 The xor-longest Path (01 Trie)

    链接:http://poj.org/problem?id=3764 题面: The xor-longest Path Time Limit: 2000MS   Memory Limit: 65536K ...

  9. JS获取字符串实际长度(包含汉字)的简单方法

    方法一: var jmz = {}; jmz.GetLength = function(str) { ///<summary>获得字符串实际长度,中文2,英文1</summary&g ...

  10. LOJ#2723 多边形

    解:首先,n<=20的直接暴力建图然后状压哈密顿回路,相信大家都会.固定1为起点,fi,s表示结尾为i点,状态为s.每次遍历i的出边转移,最后遍历1的出边统计答案.n22n. 然后就是正经题解了 ...