首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将绑定发布服务器组合到PassthroughSubject

将绑定发布服务器组合到PassthroughSubject
EN

Stack Overflow用户
提问于 2022-04-26 08:46:22
回答 1查看 713关注 0票数 2

这个问题以前已经被有效地问过了(Combine assign publisher to PassthroughSubject),但是答案假设这个问题的例子的结构是完全错误的。

我也面临着同样的问题,在我觉得是另一个例子的情况下,我非常喜欢澄清这个问题。

我有一个viewmodel类,它为客户端层提供了一个公共的errorMessage发布者来完成它想要做的事情。这里只有一根绳子。私下里,这个出版商是由一个PassthroughSubject支持的--我在内部从不同的地方“进入monad”,所以我想在那个阶段紧急地发送错误消息。

我在这里的切入点之一恰好是另一个联合出版商。我只想映射和绑定,就像在RxSwift中所做的那样:

代码语言:javascript
复制
private let _errorMessageSubject = PublishSubject<String>()
public let errorMessageRail = _errorMessageSubject.asObservable()

private func setup() {
   ...

   myEngine.errorMessages
     .map { msg in "Internal error: \(msg)" } 
     .bind(to: _errorMessageSubject)
   
   ...
}

private func someOtherMethod() {
   _errorMessageSubject.onNext("Surprise")
}

在联合收割机中,我不知道怎么做,只知道:

代码语言:javascript
复制
private let _errorMessageSubject = PassthroughSubject<String,Never>()
public let errorMessageRail = _errorMessageSubject.eraseToAnyPublisher()

private func setup() {
   ...

   myEngine.errorMessages
     .map { msg in "Internal error: \(msg)" } 
     .sink { [weak self] msg in
         self?._errorMessageSubject.send(msg)
     }
   
   ...
}

private func someOtherMethod() {
   _errorMessageSubject.send("Surprise")
}

在我们讨论并发性问题之前,假设我总是在特定的调度队列上仔细地推送到_errorMessageSubject。为了清楚起见,我从上面的代码中省略了这一点。

因此,考虑到这个例子,除非我遗漏了一些非常明显的东西,否则flatMap不会在这里帮助我。

self-improvement?

  • 是我被困在这个水槽->发送舞蹈吗?
  • 还是有一些令人眼花缭乱的代码气味,关于我的公共/私人发行者/主题模式(我经常用它来架设与反应式架构之间的命令式),并且有某种灵魂能把我引向的方向。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-12 07:15:45

这听起来像是你想让你的铁路成为_errorMessageSubject和另一个出版商的合并。因此,我将使errorMessageRail成为一个变量,这样它就可以在初始化后(仅通过这个类)进行更改:

代码语言:javascript
复制
public private(set) var errorMessageRail = _errorMessageSubject.eraseToAnyPublisher()

然后,在安装程序中,更改轨道,使其包括附加流:

代码语言:javascript
复制
   func setup() {
        ...

        errorMessageRail = _errorMessageSubject.merge( with:
            myEngine.errorMessages
                .map { msg in "Internal error: \(msg)" }
        ).eraseToAnyPublisher()

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

https://stackoverflow.com/questions/72010969

复制
相关文章

相似问题

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