【发布时间】:2018-05-10 19:26:52
【问题描述】:
假设我想在聊天应用程序中发送评论,但前提是某些变量为真 (shouldSendMessage),使用 Observables 实现此目的的最佳方法是什么?
这可行,但很丑:
Observable.of({})
.takeWhile(() => this.state.alive)
.flatMap(() => this.state.shouldSendMessage ? Observable.of({}) : Observable.empty())
.flatMap(() => this.Chat.sendMessage(myMessage))
.subscribe(x => {
//Do something after message sent successfully
});
我想做得更好的两行是:
Observable.of({})
和
.flatMap(() => this.state.shouldSendMessage ? Observable.of({}) : Observable.empty())
注意:this.state.alive 是为了不需要为订阅和取消订阅存储单独的变量
【问题讨论】:
-
你为什么要这样创建这个可观察链?服务调用之前的所有事情都不需要用 observables 来完成,这是您不喜欢代码的原因。
-
@DanielWSrimpel 我还不知道是否要调用
sendMessage,因为这取决于其他条件 -
你的 Promise 链最多只能运行一次你所拥有的(因为你的链的开始会发出一个值)。您可以在发送逻辑之前拥有所有逻辑,而不是在 observable 中完成
-
另外,如果你真的需要这样的链,你实际上会想要使用
filter(例如filter(() => this.state.shouldSendMessage))而不是你的第一个flatMap -
@DanielWSrimpel 感谢您的回复。如果检查通过,您会建议仅运行某些方法的最佳方法是什么?我不能把
sendMessage放在第一位,因为它会一直运行。链中应该先出现什么? (不只是使用if condition
标签: angular typescript rxjs observable