在这种情况下,我对代码流程有些困惑。请参考下面的代码。
import { fromEvent } from 'rxjs';
import { mapTo } from 'rxjs/operators';
let btn = document.getElementById("btnclick");
let btn_clicks = fromEvent(btn, 'click');
let positions = btn_clicks.pipe(mapTo ("Testing MapTo"));
positions.subscribe(x => console.log(x));
当我单击按钮时,它输出Testing MapTo
。一开始我以为只要单击按钮,就会调用.pipe()
方法,然后再调用.subscribe()
方法,使它在console中输出。但是我读过,
subscribe is for activating the observable and listening for emitted values
在link中。
问题:
this.http.get('url')
.pipe(
filter(x => x % 2 === 0),
map(x => x + x)
)
.subscribe(x => {
console.log(x);
}
当您了解pipe
的含义时,流程将变得清楚。它按照它所说的那样,在源和订阅发出的值之间传递内容。
source ---> modify results by ---> subscription
piping in operators
click ---> map (convert) click event ---> console.log(x)
event to string "Testing MapTo"
Http ---> go forward only if ---> map (convert) ---> console.log(x)
observable number is even result = 2 * result
[预订了可观察对象时(例如positions.subscribe(x...
),将调用Observable类的subscribe
方法。之后,回调函数进入中断模式,并等待观察对象发出。这是关键。订阅会触发可观察到的操作中的语句序列,但是not并不知道何时可观察到的将发出。这就是为什么将可观察值称为获取值的subscribe
功能,subscribe
功能就会发挥作用。因为请记住,可观察对象不是直接订阅的。是pipe
。它类似于语句pipe
。应用于someObs.pipe(...).subscribe()
的someData.getSum().getAverage()
功能的结果将是getSum()
功能的输入。同样,管道中的运算符将应用于源可观察对象,该源将返回新的修改后的可观察对象。订阅将等待此可观察的结果。
非正式示例
someData
这里要注意的两件事: