Создайте BaseObserver в TypeScript, используя RxJS - PullRequest
0 голосов
/ 22 мая 2019

В Swift я создал BaseObserver, в методе подписки я пропускаю этот класс. Я пытаюсь сделать то же самое в RxJS, используя TypeScript.

Это удобно, когда вы хотите что-то сделать до и после каких-либо событий.

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 Ответ

1 голос
/ 22 мая 2019
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);
...