RxJS管道如何工作(可调运营商)

时间:2017-11-11 10:46:15

标签: rxjs5

这实际上是对自己的注意,但它可能对其他人有用。

所以,这里有两段代码和我在gitter中的问题:

这两者有什么区别?:

    @Effect()
    loadRegistrationsFailed$: Observable<Action> = this.actions$
        .ofType(registrations.LOAD_FAIL)
        .pipe(
            map(
                action =>
                    new ShowErrorDialogAction({
                        correlationId: new Guid(),
                        title: "Server is unreachable",
                        message:
                            "Can't load user registrations. Can't connect to the server"
                    })
            )
        );
```
and
```
    @Effect()
    loadRegistrationsFailed$: Observable<Action> = this.actions$
        .ofType(registrations.LOAD_FAIL)
        .pipe(action =>
            of(
                new ShowErrorDialogAction({
                    correlationId: new Guid(),
                    title: "Server is unreachable",
                    message:
                        "Can't load user registrations. Can't connect to the server"
                })
            )
        );

1 个答案:

答案 0 :(得分:1)

感谢Brandt B.,答案是:

  

它与管道功能的工作方式有关。 pipe减少了传递给它的函数数组。在前一个值中,它执行map函数,该函数存储您在内部传递给映射的函数。在第二个例子中,它执行action =&gt;即时的,并作为管道的结果返回它。因此,整个observable的结果是(action)由效果库订阅,立即生成值

Dorus对同一个问题的回答:

这两个样本之间的区别在于第一个将映射值,其中第二个将只替换整个事物并忽略源发出的任何内容。

写第二个的正确方法是

keys 460*  combine keys 45412*

由于你不使用动作,你也可以使用mergeMapTo或mepTo:

@Effect()
loadRegistrationsFailed$: Observable<Action> = this.actions$
    .ofType(registrations.LOAD_FAIL)
    .pipe(ob => ob.mergeMap(action =>
        of(
            new ShowErrorDialogAction({
                correlationId: new Guid(),
                title: "Server is unreachable",
                message:
                    "Can't load user registrations. Can't connect to the server"
            })
        ))
    );

lettable运营商添加的唯一东西是你可以写.pipe(map())而不是.pipe(ob =&gt; ob.map())