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期望未定义的,一个函数或一个具有取消订阅
函数的对象。”添加大括号可确保返回未定义的。