在Angular中使用.pipe()和.subscribe()时控制流
在本例中,我对代码流有点困惑。请参考下面的代码在Angular中使用.pipe()和.subscribe()时控制流,angular,rxjs,pipe,observable,subscribe,Angular,Rxjs,Pipe,Observable,Subscribe,在本例中,我对代码流有点困惑。请参考下面的代码 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")); posi
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));
当我单击按钮时,它将输出测试映射到。一开始,我认为每当按钮点击时,都会调用.pipe方法,然后调用.subscribe方法,使其在控制台中输出。但是我读到,
subscribe is for activating the observable and listening for emitted values
在公园里
问题:
既然.subscribe是在.pipe之后调用的,那么它是如何工作的呢?我的意思是,只有在订阅之后,它才能得到值,那么它是如何通过的。管道?请帮助我理解这一点。
当我们执行这样的http调用时会发生什么?如果返回的obeservable是x:
当您理解管道的含义时,流程就清楚了。它照它说的做,它在源和订阅发出的值之间插入一些东西
source ---> modify results by ---> subscription
piping in operators
问题1
问题2
更新冷观测
当一个冷可观测对象被订阅到positions.subscribex…,则调用可观测类的方法。之后,回调函数进入中断模式,等待可观察对象发出。这是这里的钥匙。订阅会触发可观测到的操作中的语句序列,但它不知道可观测到的将在何时发出。这就是为什么被称为获取值的推送方法的原因。当输出就绪时,可观察对象推动输出
一旦observable类中的subscribe函数被触发,该函数就开始发挥作用。因为记住,可观察的不是直接订阅的。这是一个烟斗…订阅。它类似于语句someData.getSum.getAverage。应用于someData的getSum函数的结果将成为getAverage函数的输入。同样,管道中的操作符将应用于源可观测值,该源可观测值将返回一个新的修改可观测值。订阅会等待这个可观察到的
非正式例子
订购比萨饼场景
+----------------------------------+---------------------------------------+
| Ordering pizza | Subscribing to observable |
+----------------------------------+---------------------------------------+
| Place order | Subscribe to observable |
| Kitchen worker starts processing | The observable starts processing |
| No onions | Filter some values |
| Double chesse | Map the values to return (2 * values) |
| Some other toppings | Some other operators |
| Receive the pizza | Receive the value |
+----------------------------------+---------------------------------------+
这里需要注意两件重要的事情:
你点比萨饼等着。你不知道什么时候你会收到披萨——非正式地说,一些特权人士可能会利用优势,插队。与订阅不知道何时接收数据的方式相同。这就是为什么它是异步的,幸运的是RxJS没有任何区别。无论其属性如何,所有订阅都将等待
现在很容易错误地认为订阅与可观察对象没有任何关系。它只是一个等待接收数据的观察者,而被观察者已经开始处理它的语句。那是错误的。在这种情况下,订阅回调应该在您订阅后立即接收数据。但在现实中,可观察的事物直到被订阅才开始
当您理解管道的含义时,流程就清楚了。它照它说的做,它在源和订阅发出的值之间插入一些东西
source ---> modify results by ---> subscription
piping in operators
问题1
问题2
更新冷观测
当一个冷可观测对象被订阅到positions.subscribex…,则调用可观测类的方法。之后,回调函数进入中断模式,等待可观察对象发出。这是这里的钥匙。订阅会触发可观测到的操作中的语句序列,但它不知道可观测到的将在何时发出。这就是为什么被称为获取值的推送方法的原因。当输出就绪时,可观察对象推动输出
一旦observable类中的subscribe函数被触发,该函数就开始发挥作用。因为记住,可观察的不是直接订阅的。这是一个烟斗…订阅。它类似于语句someData.getSum.getAverage。应用于someData的getSum函数的结果将成为getAverage函数的输入。同样,管道中的操作符将应用于源可观测值,该源可观测值将返回一个新的修改可观测值。订阅会等待这个可观察到的
非正式例子
订购比萨饼场景
+----------------------------------+---------------------------------------+
| Ordering pizza | Subscribing to observable |
+----------------------------------+---------------------------------------+
| Place order | Subscribe to observable |
| Kitchen worker starts processing | The observable starts processing |
| No onions | Filter some values |
| Double chesse | Map the values to return (2 * values) |
| Some other toppings | Some other operators |
| Receive the pizza | Receive the value |
+----------------------------------+---------------------------------------+
这里需要注意两件重要的事情:
你点比萨饼等着。你不知道什么时候你会收到披萨——非正式地说,一些特权人士可能会利用优势,插队。与订阅不知道何时接收数据的方式相同。这就是为什么它是异步的,幸运的是RxJS没有任何区别。无论其属性如何,所有订阅都将等待
现在很容易错误地认为订阅与可观察对象没有任何关系。它只是一个等待接收数据的观察者,而被观察者已经开始处理它的语句。那是错误的。在这种情况下,订阅回调应该在您订阅后立即接收数据。但在现实中,可观察的事物直到被订阅才开始
p>
Hello@Michael D,只想澄清另外两件事:每当我们调用subscribe时,observable中的订户函数被调用了,对吗?因此,该值第一次出现在。。。subscribex=>。。。作用那么管道什么时候出现,比如说它是自下而上的吗?你在回答中提到的订阅是什么?@KL_KISNE_DEKHA_HAI:在我提到的数据流中,console.logx函数将是订阅回调函数。对于另外两个问题,我已经更新了答案。希望它能帮助你更好地理解。嘿@Michael D,谢谢你。这确实帮了大忙。你能把我的问题也投赞成票吗。让更多的人参与进来。Hello@Michael D,你能帮我回答这个问题吗:Hello@Michael D,我只是想澄清另外两件事:每当我们调用subscribe时,observable中的订户函数就被调用了,对吗?因此,该值第一次出现在。。。subscribex=>。。。作用那么管道什么时候出现,比如说它是自下而上的吗?你在回答中提到的订阅是什么?@KL_KISNE_DEKHA_HAI:在我提到的数据流中,console.logx函数将是订阅回调函数。对于另外两个问题,我已经更新了答案。希望它能帮助你更好地理解。嘿@Michael D,谢谢你。这确实帮了大忙。你能把我的问题也投赞成票吗。让更多的人参与进来。你好@Michael D,你能帮我回答这个问题吗:
+----------------------------------+---------------------------------------+
| Ordering pizza | Subscribing to observable |
+----------------------------------+---------------------------------------+
| Place order | Subscribe to observable |
| Kitchen worker starts processing | The observable starts processing |
| No onions | Filter some values |
| Double chesse | Map the values to return (2 * values) |
| Some other toppings | Some other operators |
| Receive the pizza | Receive the value |
+----------------------------------+---------------------------------------+