【发布时间】:2019-06-11 17:43:10
【问题描述】:
我需要执行一些操作(我事先不知道),并且在所有操作完成后,我想返回一个 void observable 供感兴趣的人可能正在听以便在完成后做其他事情.
示例:
A类
public hook: () => void;
pubic doAndReturnObservable(): Observable<void>{
hook();
return Observable.of();
}
public notifyToOther(){
classB.notify(this.doAndReturnObservable());
}
hook 是一个箭头函数,它被传递给 A 类,将包含一些希望以通用方式执行的事情
B类
public notify(actionsToPerform: Observable<void>){
actionsToPerform.subscribe(()=>{
console.log('now all has been done! I can do something else');
});
}
问题是我不知道“钩子”可能会做什么,可能有几个动作,它们可能包括 http 调用或异步进程。我的 doAndReturnObservable 方法将触发所有需要完成的钩子,但在返回我订阅的可观察对象之前它不会等待它完成,因此我的控制台日志在钩子完成之前显示。
有人有办法实现这种事情吗?提前致谢。
【问题讨论】:
-
据我了解,您想在某些操作后执行某些操作。在这种情况下,您可以使用主题可观察逻辑在某些操作后调用某些函数...请查看musttoknow.com/…。 . 让我知道这个预期的 else 是否会尝试另一个。
-
当钩子完成时,它就完成了。如果那里有异步调用,则必须在钩子中等待它们。你可能想重新考虑你的设计,也许钩子应该是可观察的?
-
好的...在这种情况下您需要使用 await ..这样当 hook() 函数被执行时,只有 Observable get return..稍后会详细发布。
-
您是自己实施
hook,还是从第三方/其他团队获得?正如您当前定义的hook,它是一个同步函数,调用它将阻止您的执行并等待它返回,然后再执行return Observable.of();。 -
@fridoo 钩子不是来自第三方...旨在触发来自其他组件的操作,这些操作可能会将它们作为输入传递给类 A 上表示的组件
标签: angular typescript rxjs angular6 observable