gpt4 book ai didi

ngrx - 这个@ngrx 示例中的 mergeMap 有什么好处?

转载 作者:行者123 更新时间:2023-12-01 05:39:18 27 4
gpt4 key购买 nike

以下示例取自 @ngrx example .

我以这种方式理解这个 observable。第一map函数获取 payload这是要添加的书,再次由mergeMap处理它保存到数据库的位置。

原码:

  @Effect()
addBookToCollection$: Observable<Action> = this.actions$
.ofType(collection.ActionTypes.ADD_BOOK)
.map((action: collection.AddBookAction) => action.payload)
.mergeMap(book =>
this.db.insert('books', [ book ])
.map(() => new collection.AddBookSuccessAction(book))
.catch(() => of(new collection.AddBookFailAction(book)))
);

下面的代码可以做和上面一样的事情吗?为什么会有 mergeMap必需的?

修改代码:
@Effect()
addBookToCollection$: Observable<Action> = this.actions$
.ofType(collection.ActionTypes.ADD_BOOK)
.map((action: collection.AddBookAction) =>
this.db.insert('books', [ action.payload ])
.map(() => new collection.AddBookSuccessAction(action.payload))
.catch(() => of(new collection.AddBookFailAction(action.payload)))
);

最佳答案

虽然@cartant 添加了第一个答案,但答案和评论很难理解。这是我如何解释这段代码。

在原始代码中,this.actions$原始 observable .第一个 map 创建的 observable是 外部可观察 . 内部可观察 是由 this.db.insert 创建的 observable .因此这里有 3 个 observables。

效果addBookToCollection$ .

这段代码(原代码)的目的是生成一个addBookToCollection$可观察的类型 Observable<action> .第一个map将创建一个 Observable<Book> .这种类型不是什么效果,所以根本不能以第一个map结尾.此 Observable<Book>需要转换为Observable<Action> .

我们可以使用 switchMapmergeMap转换 Observable<Book>Observable<action> .这两种方法都将高阶 observable 转换为一阶,如下所示:
Observable<Observable<Book> ----> Observable<Action>switchMap有利于异步操作,其中最新的内部 observable 将被发出并且可以被@ngrx 订阅。但是mergeMap用于让所有内部 observables 作为并发进行。因此,它将允许用户选择的所有书籍从 this.db.insert 生成可观察量。 .本质上,mergeMap需要外部可观察 来自 map并与 合并内部可观察 来自 this.db.insert生成一个新的一阶 observable。
mergeMap需要book ( action.payload 来自上一个 map )并将其传递给 this.db.insert . this.db.insert将通过 collection.AddBookSuccessAction(book) 生成一个 Action 类型 Observable<Action> . mapthis.db.insert返回到 mergeMapmergeMap返回第一个订单 Observable<Action> .
Modified Code出了什么问题?修改后的代码仅使用 map它返回类型为 Observable<Observable<AddBookSuccessAction>>> 的高阶 observable .这不是正确类型的效果 addBookToCollection$应该是 Observable<Action> 类型.

关于ngrx - 这个@ngrx 示例中的 mergeMap 有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43162904/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com