说我有这个:
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而不是process.on('message'),因此更易于进行测试:
https://gist.github.com/ORESoftware/ea5d754d6ca6c92ca7e3bddc7eb318c2
答案 0 :(得分:1)
如果我理解正确,您想创建一个Observable,它在'message'
收到process
事件时发出。
如果是这种情况,我认为bindCallback
是不正确的方法。调用bindCallback
创建的函数的Observable返回仅发出一次,并且发出作为调用调用参数的数据。
您想要的是每次收到消息时都会发出多次的Observable(同样,如果我的理解正确)。
为此,您可以使用Observable的create
静态方法。该代码可能类似于以下内容
Observable<any>(
(subscriber: Observer<any>) => {
process.on('message',
m => {
// do stuff with m
}
);
}
);
您可能会在this article的bindCallback
周围找到一些推理。