Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多次观察到火灾_Javascript_Observable - Fatal编程技术网

Javascript 多次观察到火灾

Javascript 多次观察到火灾,javascript,observable,Javascript,Observable,我有一个api,每隔一段时间就会在回调上触发一个事件: api(params, (error, result) => console.log('PUBSUB', result) ); 这意味着我在console.log中看到此api结果的多个日志 我希望使用一个可观察的方法来实现这一点 const obs = Observable.bindNodeCallback((params, callback) => api(params, callback) ); obs.sub

我有一个api,每隔一段时间就会在回调上触发一个事件:

api(params, (error, result) =>
  console.log('PUBSUB', result)
);
这意味着我在console.log中看到此api结果的多个日志

我希望使用一个可观察的方法来实现这一点

const obs = Observable.bindNodeCallback((params, callback) =>
  api(params, callback)
);

obs.subscribe(data => console.log('OBSERVABLE', data));

我只看到一个console.log。它与相关,但我无法找到一种方法让它多次开火。

rxjs一开始非常混乱。你最好先创建一个
主题
,然后再创建一个
可观察的
,其他方法可以订阅该主题

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

我最终选择了以下几点:

  const obs = params => Observable.create(observer => {
    api(params, (error, result) => {
      if (error) {
        observer.error(error);
      } else {
        observer.next(result);
      }
    });
  });

如果有人有更好的想法,我会很高兴更改已被接受的答案。

我知道这是一篇老文章,但它可能会帮助某些人:


我添加了[reactjs]标记,我想这是正确的?我使用的是react,但这个问题与react无关。据我所知,与Observable相关的任何内容都不是核心JS语言的一部分,因此它似乎绝对相关。Observable可以在任何地方使用,它与react无关。我在Angular 4和TypeScript中使用它,所以..“不是核心JS语言的一部分”->你是什么意思?
Observable.fromEventPattern(
  (handler) => {
    // unsubscribtion can be returned
    return api(params, (error, result) => {
      // handle errors
      handler(result)
    })
  },
  (handler, unsubscribe) => { unsubscribe(); }
)