Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.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 使用RxJs获取错误";订阅中添加了无法识别的拆卸10“;_Javascript_Rxjs_Event Loop - Fatal编程技术网

Javascript 使用RxJs获取错误";订阅中添加了无法识别的拆卸10“;

Javascript 使用RxJs获取错误";订阅中添加了无法识别的拆卸10“;,javascript,rxjs,event-loop,Javascript,Rxjs,Event Loop,我试图在零超时时进行简单订阅,以便在事件循环移动到下一阶段后执行一些代码 import { Observable } from 'rxjs/Observable'; const render = () => { ... return Observable.create(observer => setTimeout(() => { observer.next(); observer.complete()

我试图在零超时时进行简单订阅,以便在事件循环移动到下一阶段后执行一些代码

  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(() => { ... });

怎么了

当RxJS期望
未定义的
函数或具有
取消订阅
函数的对象时,您将返回
setTimeout
调用的结果

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

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

我不明白为什么添加大括号可以解决这个问题,但它对我也起到了作用。@gian848396没有大括号,会隐式返回从
setTimeout
和“RxJS期望
未定义的
,一个函数或一个具有
取消订阅
函数的对象。”添加大括号可确保返回
未定义的