Создайте BaseObserver в TypeScript, используя RxJS

В 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?()
    }
}
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом...
1
0
96
1
Перейти к ответу Данный вопрос помечен как решенный

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

Можете ли вы ответить на это в машинописном тексте, используя класс?

Anirudha Mahale 22.05.2019 11:49

Отредактировано. Это то, что вы ищете?

Julius 22.05.2019 15:21

Спасибо @Julius Dzidzevičius, это то, что я хотел. Я внес некоторые изменения, сделав class Generic.

Anirudha Mahale 24.05.2019 09:05

Другие вопросы по теме