标签:pat int 参数 数据类型 ISE 异步 事件 自增 传递
解决javascript异步编程方案有两种,一种是promise对象形式,还有一种是是Rxjs库形式,Rxjs相对于Promise来说,有好多Promise没有的特性和功能,使用起来更便捷简单;
Rxjs 是Reactive Extensions JavaScript 的简写,响应式异步编程;同Promise对象一样,是解决JS异步编程的一种解决方案;
// 安装rxjs
npm install rxjs --save
// 安装rxjs-compat, rxjs-compat软件包在v5和v6之间创建了一个api兼容层
npm install rxjs-compat --save
// 获取html元素
const btnElem = document.querySelector(‘button#rxjsBtn‘);
// 创建按钮的点击事件为可观察对象
Rx.Observable.fromEvent(btnElem, ‘click‘)
.scan(count => count + 1, 0) // count为定义的变量;逗号后面的0为count的初始值;箭头后面的语句值为scan返回的值;
.subscribe((count) => {
console.log(‘fromEvent‘ + count);
});
/// 第一次点击输出: fromEvent1;第二次点击输出fromEvent2;依次同理
const arrayData = [5, 6];
Observable.from(arrayData).pipe(
scan((scanData, item) => scanData += item, 10),
map((item) => item * 2),
).subscribe((data: any) => {
console.log(‘from:‘ + data);
});
/// 浏览器输出 from:30 from:42
Observable.of(‘value1‘, ‘value2‘)
.subscribe((data: any) => {
console.log(‘of:‘ + data);
});
/// 浏览器输出 of:value1 of: value2
const numbers = Rx.Observable.interval(1000);
numbers.subscribe(x => console.log(‘interval:‘+x));
/// 浏览器输出: interval:1 interval2 依次增加
const obs = Observable.create((obsever) => {
obsever.next(‘add‘);
obsever.next(‘upt‘);
obsever.complete(); // 代表完成,之后的语句将不再会被调用;;;
obsever.next(‘del‘);
});
// 订阅观察者
obs.map(data => data + ‘Map‘).subscribe((data: any) => {
console.log(data);
});
/// 浏览器输出: addMap uptMap
Rx.Observable.from([1, 2])
.map((item) => item * 2)
.subscribe((data: any) => { console.log(‘map:‘ + data);});
/// 浏览器输出: map: 2 map: 4
const mergeA = Observable.of(1, 2, 3);
const mergeB = mergeA.map(r => Observable.of(r)).mergeMap(r => r);
mergeB.subscribe(c => console.log(‘mergeMap:‘ + c));
/// 浏览器输出: mergeMap1 mergeMap2 mergeMap3
Observable.of(1, 2, 3).mapTo(33).subscribe(data => {console.log(data);});
/// 浏览器输出: 3个55
Rx.Observable.from([1, 2]).pipe(
scan((acc, item) => acc += item, 10)) // acc为一个新变量,item为[1,2]中的每一项, 10为新变量acc的默认初始值;返回新生成的中间值acc reduce同理
.subscribe(v => console.log(v))
/// 浏览器输出 11 13
Rx.Observable.from([1, 2]).pipe(
reduce((acc, item) => acc += item, 10))
.subscribe(v => console.log(v))
// 输出
13
import {Observable} from ‘rxjs‘;
import {filter} from ‘rxjs/internal/operators‘;
from([2, 3, 4]).pipe(
filter(item => item <= 3))
.subscribe(v => console.log(v))
// 浏览器输出: 2 3
实现: 一秒内不管有多少点击事件;只触发一次点击事件;,
const throttleElem = document.querySelector(‘#throttleElem‘);
// 一秒内只触发一次点击事件
Rx.Observable.fromEvent(throttleElem, ‘click‘)
.throttleTime(1000)
.scan(count => count + 1, 0)
.subscribe(data => {
console.log(‘点击了‘ + data + ‘次‘);
});
标签:pat int 参数 数据类型 ISE 异步 事件 自增 传递
原文地址:https://www.cnblogs.com/zero-zm/p/9911827.html