如何将Promise<Observable<T>>转换为Observable<T>类型?
实现方案
你可以借助RxJS内置的from方法将Promise转换为Observable,再配合高阶映射操作符串联原有异步逻辑,让函数直接返回Observable类型即可,具体实现如下:
代码修改
import { from, Observable } from 'rxjs'; import { concatMap } from 'rxjs/operators'; // 修改返回值类型为Observable<boolean> someFunction(): Observable<boolean> { // 将第一个Promise转为Observable return from(Promise1()) .pipe( // 匹配原有Promise链的执行顺序,前一个异步完成再执行下一个 concatMap(text => from(Promise2(text))), concatMap(resultString => Observable(resultString)) ) }
说明
from方法可以直接把Promise包装为Observable,Promise resolve时Observable就会推送对应结果- 这里用
concatMap而不是switchMap/mergeMap,是因为它的执行逻辑和原有的Promise链式调用完全一致,严格按顺序执行不会出现竞态问题,完美对齐原有业务逻辑 - 修改后即可直接使用你需要的调用方式:
someFunction().subscribe(res => { // 直接拿到Observable推送的结果 });
内容的提问来源于stack exchange,提问作者nothing
相关产品推荐
相关产品推荐

