Наблюдаемый от обратного вызова, где обратный вызов не является первым ошибочным - PullRequest
0 голосов
/ 03 октября 2018

Скажите, у меня есть это:

const register = function(cb){

   process.on('message', m => {

         cb(m, (err, v) => {

            process.send({error: err, value: v});

         });
   });

};

мы используем вышеперечисленное как:

register((m, cb) => {

   // do something with m

   setTimeout(() => {
      cb('some error', m);
   }, 100);

});

мой вопрос - есть ли способ использовать Rx.Observable с этим - большинство примеровRx.Observable.fromCallback обернет обратный вызов с ошибкой.Но в этом случае обратный вызов не является ошибкой.Как упражнение, как заставить это работать для безошибочных первых обратных вызовов?Вот начало:

const {Observable, bindNodeCallback} = require('rxjs');

const obs = bindNodeCallback(register);

const subscription = obs().subscribe(v => {

}, e => {
       // this gets hit since the first arg is not an error
 });

кто-нибудь имел дело с этим раньше?

Обновление , я немного ближе, в следующем примере вместо процесса используется setInterval.(«сообщение»), чтобы с ним было проще работать:

https://gist.github.com/ORESoftware/ea5d754d6ca6c92ca7e3bddc7eb318c2

1 Ответ

0 голосов
/ 03 октября 2018

Если я правильно понимаю, вы хотите создать Observable, который генерирует каждый раз, когда 'message' получает событие *1001*.

Если это так, я думаю, что bindCallback неправильный подход.Возвращаемое Observable, вызывающее функцию, созданную с помощью bindCallback, выдает только один раз и передает данные, которые являются параметрами, используемыми для вызова.Получено (опять же, если я правильно понимаю).

Для этого вы можете использовать create статический метод Observable.Код может выглядеть примерно так:

Observable<any>(
        (subscriber: Observer<any>) => {
            process.on('message', 
                m => {
                    // do stuff with m
                }
            );
        }
);

Вы можете найти немного рассуждений вокруг bindCallback в этой статье .

...