【问题标题】:rxjs observable not createdrxjs observable 未创建
【发布时间】:2017-07-03 05:03:11
【问题描述】:

我有一个像这样的简单 Angular 2 服务:

let ws = new WebSocket(url);

let observable = Observable.create((obs: Observer<MessageEvent>) => {

  console.log('create')

  ws.onmessage = obs.next.bind(obs);
  ws.onerror   = obs.error.bind(obs);
  ws.onclose   = obs.complete.bind(obs);

  return ws.close.bind(ws);
});

问题是回调函数永远不会被调用。 create 的日志输出永远不会执行。知道我做错了什么吗?

【问题讨论】:

  • RxJS 中已经有一个函数可以通过 web socket 连接进行观察,所以你不需要自己做。

标签: angular observable


【解决方案1】:

你没有订阅你创建的 observable。工作代码:

const {
  Observable
} = Rx;

let ws = new WebSocket("wss://echo.websocket.org");

let observable = Observable.create((obs) => {
  console.log('create')

  setInterval(() => {
    ws.send("ping");
  }, 2000);

  ws.onmessage = obs.next.bind(obs);
  ws.onerror = obs.error.bind(obs);
  ws.onclose = obs.complete.bind(obs);

  return ws.close.bind(ws);
});

let ws$ = observable.subscribe({
  next: (val) => {
    console.log("Observable emits: " + val.data)
  },
  complete: (val) => {
    console.log("Observable complete")
  },
  error: (val) => {
    console.log("Observable error")
  },
});

setTimeout(() => {
  ws$.unsubscribe();
}, 10000);
&lt;script src="https://unpkg.com/rxjs/bundles/Rx.min.js"&gt;&lt;/script&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 2018-12-13
    • 2020-07-26
    • 1970-01-01
    • 2016-09-06
    • 2021-10-28
    • 1970-01-01
    相关资源
    最近更新 更多