代码之家  ›  专栏  ›  技术社区  ›  MgSam Brad M

扁平化承诺

  •  2
  • MgSam Brad M  · 技术社区  · 6 年前

    我有一个函数可以执行以下操作:

    async foo() {
        await doSomething();
    
        return getObservableFromSomewhereElse();
    }
    

    问题是 await 使签名成为 Promise<Observable<T>> .因为我已经返回了一个可观察的,所以我只想将承诺折叠到可观察的中,以便签名 Observable<T>

    注: doSomething() 必须 发生在之前 getObservableFromSomewhereElse()

    我想 Observable.defer() 可能会有帮助,但我不确定。

    关于如何使此函数返回的任何想法 可观察(<T> ?

    1 回复  |  直到 6 年前
        1
  •  2
  •   udalmik    6 年前

    如评论线程中所述-您可以离开 foo 功能为 async 并重用其承诺,从而实现与

    async function foo() {
        await doSomething();
    }
    
    function bar() {
        return Observable
           // emits one value from resolved promise
           .fromPromise(foo())
           // maps it to your observable stream
           .flatMap(() => getObservableFromSomewhereElse());
    }