使用 RxJs 时出错 "unrecognized teardown 10 added to Subscription"

Getting Error with RxJs "unrecognized teardown 10 added to Subscription"

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

  import { Observable } from 'rxjs/Observable';

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

  ...

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

这导致

ERROR Error: unrecognized teardown 10 added to Subscription.
at Subscriber.Subscription.add (Subscription.js:144)
...

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

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

  ...

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

这是怎么回事?

当 RxJS 期望 undefined 时,您将返回 setTimeout 调用的结果,函数或具有 unsubscribe 函数的对象。

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

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