使用 RxJS 在 TypeScript 中创建 BaseObserver
Posted
技术标签:
【中文标题】使用 RxJS 在 TypeScript 中创建 BaseObserver【英文标题】:Create BaseObserver in TypeScript using RxJS 【发布时间】:2019-05-22 09:30:40 【问题描述】:在 Swift 中我创建了 BaseObserver,在订阅方法中我通过了这个类。 我正在尝试使用 TypeScript 在 RxJS 中做同样的事情。
当您想在任何事件发生之前和之后做某事时,这很方便。
import Foundation
import RxSwift
class BaseObserver<Element>: ObserverType
public typealias E = Element
var beforeClosure: (() -> Void)?
var completeClosure: ((E) -> Void)?
var errorClosure: ((Error) -> Void)?
var completedClosure: (() -> Void)?
var alwaysClosure: (()->())?
var onCompleteOrError: ((Error?) -> Void)?
init(beforeComplete: (() -> Void)? = nil, onComplete: ((E) -> Void)? = nil, onError: ((Error) -> Void)? = nil, onCompleted: (() -> Void)? = nil, always: (()->())? = nil, onCompleteOrError: ((Error?) -> Void)? = nil)
self.alwaysClosure = always
self.completeClosure = onComplete
self.errorClosure = onError
self.completedClosure = onCompleted
self.beforeClosure = beforeComplete
self.onCompleteOrError = onCompleteOrError
func on(_ event: Event<Element>)
switch event
case .next(let element):
beforeClosure?()
completeClosure?(element)
case .error(let error):
beforeClosure?()
errorClosure?(error)
onCompleteOrError?(error)
case .completed:
completedClosure?()
onCompleteOrError?(nil)
alwaysClosure?()
【问题讨论】:
【参考方案1】:class MyObserver implements Observer<any>
constructor(
private before,
private after)
next = (value: any) =>
this.before(value)
this.after(value)
;
error = (err: any) => ;
complete = () => ;
const before = value =>
console.log('before', value)
const after = value =>
console.log('after', value)
const observer = new MyObserver(this.before, this.after);
const stream = of(1, 2, 3)
const subscribe = stream.subscribe(this.observer);
【讨论】:
你能在打字稿中使用类回答这个问题吗? 已编辑。这就是你要找的东西? 谢谢@Julius Dzidzevičius,这就是我想要的。我通过使class
Generic 对此进行了一些更改。以上是关于使用 RxJS 在 TypeScript 中创建 BaseObserver的主要内容,如果未能解决你的问题,请参考以下文章
如何像在 babelrc 中创建依赖别名一样在 typescript 中创建类型别名?
使用 Typescript 在 Sequelize 模型中创建实例方法