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 ще ви даде достъп до наблюдаемото изцяло, а не само до стойностите в него. Можете да правите каквото искате с него. Трябва да върнете наблюдаема във функцията let, но ако просто направите това, което искате, и след това върнете оригинала. Няма да прекъснете веригата и можете да правите каквото искате, предполагам.

Повече информация тук: https://github.com/btroncone/learn-rxjs/blob/master/operators/utility/let.md

person KwintenP    schedule 18.11.2016
comment
Благодаря за отговора . Бих искал да отстраня грешки във всяка част от кода на RX-JS, без да модифицирам самия код. Ето защо търсите някакъв RX-JS интерфейс / Override част от RX-JS, за да надушите/регистрирате всяко събитие. Надявам се, че сега е по-ясно? Опитвам се да разработя нещо подобно jaredforsyth.com/rxvision/examples/playground - person waqas abbas; 18.11.2016