RX-JS 5 — Использование подъема для регистрации наблюдаемых данных для отладки

Я новичок в RX-JS и хотел бы регистрировать данные для целей отладки. В конце концов, мне нужно регистрировать все наблюдаемые, определенные в фрагменте кода, и все события/испускания данных, происходящие из этих наблюдаемых.

Для RX-JS. Если я переопределяю lift, становится возможным внедрить поведение во все наблюдатели в цепочке операторов, Но как я могу регистрировать RX-Observables, которые еще не применены ни к одному оператору? .

И правильно ли регистрировать все наблюдаемые, чтобы переопределить lift и подписаться на каждую наблюдаемую для регистрации данных, потому что оператор do не работает.

Вот как я пытаюсь

const _lift = Rx.Observable.prototype.lift;
var idCounter = 0;
Rx.Observable.prototype.lift = function (operator) {
    var sourceObs = this ;
    sourceObs.id = ++idCounter;
    var resultantObservable = _lift.call(sourceObs, operator);
    resultantObservable.id = ++idCounter;
    // In this Method i log data 
    LogObserver(operator , sourceObs , resultantObservable);
    return resultantObservable;
};

Код выше работает для

var timer = Rx.Observable.interval(1000).take(4);

Но не работает для

var sequence = Rx.Observable.range(1, 10);

Заранее спасибо.

С уважением


person waqas abbas    schedule 18.11.2016    source источник


Ответы (1)


Я понимаю, что вы пытаетесь сделать, но то, как вы это делаете, немного странно. Я не знаю, слышали ли вы об операторе .let. Если вы сделаете:

const subscribe = source
  .map(val => val + 1)
  .let(obs => {
     // do stuff with the observable here and return it afterwards
     // to not break the chain
     return obs;
  });

  .subscribe(val => console.log(val));

Пусть даст вам доступ к наблюдаемому полностью, а не только к значениям в нем. Вы можете делать с ним все, что хотите. Вам нужно вернуть наблюдаемое в функции let, но если вы просто сделаете то, что хотите, а затем вернете оригинал. Вы не разорвете цепочку, и вы можете делать, что хотите, я думаю.

Подробнее здесь: https://github.com/btroncone/learn-rxjs/blob/master/operators/utility/let.md

person KwintenP    schedule 18.11.2016
comment
Спасибо за ответ . Я хотел бы отладить любую часть кода RX-JS без изменения самого кода. Вот почему ищите какой-нибудь интерфейс RX-JS/переопределяющую часть RX-JS для прослушивания/регистрации каждого события. надеюсь теперь понятнее? Я пытаюсь разработать что-то вроде этого jaredforsyth.com/rxvision/examples/playground - person waqas abbas; 18.11.2016