【问题标题】:Getting Error with RxJs "unrecognized teardown 10 added to Subscription"RxJs 出现错误“添加到订阅中的无法识别的拆解 10”
【发布时间】:2018-04-26 06:59:43
【问题描述】:

我正在尝试对零超时进行简单订阅,以便在事件循环进入下一阶段后执行一些代码

  import { Observable } from 'rxjs/Observable';

  const render = () => {
    ...
    return Observable.create(observer =>
      setTimeout(() => {
          observer.next();
          observer.complete();
        })
    );
  };

  ...

  render().subscribe(() => {  ... });

这导致

错误错误:无法识别的拆卸 10 添加到订阅。
在 Subscriber.Subscription.add (Subscription.js:144)
...

如果我用 Promise 方法替换 Observable,代码会按预期工作

  const render = () => {
    ...
    return new Promise(resolve =>
      setTimeout(() => resolve())
    );
  };

  ...

  render().then(() => { ... });

那里有什么问题?

【问题讨论】:

    标签: javascript rxjs event-loop


    【解决方案1】:

    当 RxJS 需要 undefined、一个函数或带有 unsubscribe 函数的对象时,您将返回 setTimeout 调用的结果。

    您可以通过在箭头函数中添加大括号来解决此问题:

    return Observable.create(observer => {
      setTimeout(() => {
          observer.next();
          observer.complete();
        })
    });
    

    【讨论】:

    • 我不明白为什么添加大括号可以解决问题,但它也对我有用。
    • @gian848396 如果没有大括号,则隐式返回从 setTimeout 和“RxJS 期望 undefined,一个函数或具有 unsubscribe 函数的对象。”添加大括号可确保返回 undefined
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 2018-11-03
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多