我有一个api,偶尔会在回调中发起一个事件:
api(params, (error, result) =>
console.log('PUBSUB', result)
);
这意味着我在console.log中看到了这个api结果的日志。
我希望使用Observable来做到这一点
const obs = Observable.bindNodeCallback((params, callback) =>
api(params, callback)
);
obs.subscribe(data => console.log('OBSERVABLE', data));
我只看到一个console.log。它与https://github.com/ReactiveX/rxjs/issues/1401有关,但我找不到让它多次触发的方法。
答案 0 :(得分:1)
我终于选择了这些方面:
const obs = params => Observable.create(observer => {
api(params, (error, result) => {
if (error) {
observer.error(error);
} else {
observer.next(result);
}
});
});
如果有人有更好的想法,我会很乐意改变接受的答案。
答案 1 :(得分:0)
rxjs在开始时非常混乱。您最好创建Subject
,然后创建Observable
,其他方法可以subscribe
到
const testData = {myParam: ["param1", "param2"], callback: myCallback};
const callbackSubject = new Subject();
const callbackObservable = callbackSubject.asObservable();
callbackObservable.subscribe(data => console.log(data));
callbackSubject.next(testData); // subscribe is called
答案 2 :(得分:0)
我知道这是一篇过时的文章,但可能会对某人有所帮助:https://rxjs-dev.firebaseapp.com/api/index/function/fromEventPattern
Observable.fromEventPattern(
(handler) => {
// unsubscribtion can be returned
return api(params, (error, result) => {
// handle errors
handler(result)
})
},
(handler, unsubscribe) => { unsubscribe(); }
)