首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RxJS:跳过条件mergeMap

RxJS:跳过条件mergeMap
EN

Stack Overflow用户
提问于 2018-12-10 20:48:28
回答 2查看 1.6K关注 0票数 0

我有这样的服务方法:

代码语言:javascript
复制
updateUser(article) {
        this.httpClient
            .put(`articles/${article.id}`, article)
            .pipe(
                map(res => res.response),
                mergeMap(updatedArticle =>
                    this.articlesTagsAPI.someMethod(updatedArticle.id).pipe(
                        map(tags => ({ ...updatedArticle, tags })),
                        article.articleType === 'news'
                            ? mergeMap(() =>
                                  this.articlesTagsAPI.someOtherMethod(updatedArticle.id, article.tags).pipe(
                                      map(() => {
                                          return {
                                              ...updatedArticle,
                                              tags: article.tags
                                          };
                                      })
                                  )
                              )
                            : null
                    )
                )
            );
}

正如你所看到的-我正在尝试添加一个条件mergeMap (如果条件->调用另外一个方法),有没有可能这样做?

因为返回null不是最好的主意

如果conditional无效,应该会发生这样的事情:

代码语言:javascript
复制
updateUser(article) {
            this.httpClient
                .put(`articles/${article.id}`, article)
                .pipe(
                    map(res => res.response),
                    mergeMap(updatedArticle =>
                        this.articlesTagsAPI.someMethod(updatedArticle.id).pipe(
                            map(tags => ({ ...updatedArticle, tags }))
                        )
                    )
                );
    }
EN

回答 2

Stack Overflow用户

发布于 2018-12-10 21:18:50

正如在这个非常有用的订阅中所述,正确的方法是添加of指令,以便始终在最终的订阅中返回一个可观察对象的值。

试试这个:

代码语言:javascript
复制
updateUser(article) {

    this.httpClient
        .put(`articles/${article.id}`, article)
        .pipe(
            map(res => res.response),
            mergeMap(updatedArticle =>
                this.articlesTagsAPI.someMethod(updatedArticle.id).pipe(
                    map(tags => ({ ...updatedArticle, tags })),
                    article.articleType === 'news'
                        ? mergeMap(() =>
                                this.articlesTagsAPI.someOtherMethod(updatedArticle.id, article.tags).pipe(
                                    map(() => {
                                        return {
                                            ...updatedArticle,
                                            tags: article.tags
                                        };
                                    })
                                )
                            )
                        : of(null)
                )
            )
        );
}
票数 2
EN

Stack Overflow用户

发布于 2020-09-28 00:05:15

试试这个:

updateUser(文章){

代码语言:javascript
复制
  this.httpClient
        .put(`articles/${article.id}`, article)
        
       .pipe(
            map(res => res.response),
            

                mergeMap(() =>       
                 this.articlesTagsAPI.someOtherMethod(updatedArticle.id, 
                           article.tags).pipe(
                                  map(() => {
                                     if(article.articleType === 'news'){
                                      return {
                                          ...updatedArticle,
                                          tags: article.tags
                                      };
                                     }else{ return of([])}
                                  })
                              )
                          )
                        
                )
            )
        );

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53705994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档