Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Angular中使用.pipe()和.subscribe()时控制流_Angular_Rxjs_Pipe_Observable_Subscribe - Fatal编程技术网

在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没有任何区别。无论其属性如何,所有订阅都将等待

现在很容易错误地认为订阅与可观察对象没有任何关系。它只是一个等待接收数据的观察者,而被观察者已经开始处理它的语句。那是错误的。在这种情况下,订阅回调应该在您订阅后立即接收数据。但在现实中,可观察的事物直到被订阅才开始
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                     |
+----------------------------------+---------------------------------------+