【问题标题】:Return an observable after a couple of actions have been performed在执行了几个操作后返回一个 observable
【发布时间】: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


【解决方案1】:

检查一下:

async function f() {

  let promise = new Promise((resolve, reject) => {
    setTimeout(() => resolve("done!"), 1000)
  });

  let result = await promise; // wait till the promise resolves (*)

  alert(result); // "done!"
}

这里的promise 将等待完成Promise 来解决。参考https://javascript.info/async-await

【讨论】:

  • 这似乎是解决方案。将钩子作为承诺处理。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 2018-02-11
相关资源
最近更新 更多