Fire Observable bindCallback多次

时间:2018-01-29 15:51:09

标签: javascript observable

我有一个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有关,但我找不到让它多次触发的方法。

3 个答案:

答案 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(); }
)