展平承诺<obserable <t>&gt;

时间:2018-04-11 15:21:54

标签: typescript rxjs

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

async foo() {
    await doSomething();

    return getObservableFromSomewhereElse();
}

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

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

我认为Observable.defer()可能对此有所帮助,但我不确定。

有关如何使此功能的任何想法都返回Observable<T>

1 个答案:

答案 0 :(得分:1)

如评论主题中所述 - 您可以将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());
}