我试图通过在数组中定义多个函数来连续执行它们(特别是针对一个Angular APP_INITIALIZER函数).

我有这个数组:

const obsArray = [
    myService1.init(),
    myService2.init(),
    ...
    myServiceN.init()
]

init()个方法中的每一个都返回Observable<void>.下面是一个例子:

    init() : Observable<void> {
         return this.http.get(this.apiUrl)
             .pipe(
                 // do something with the response
                 switchMap(() => EMPTY)
             );
    }

``SwitchMapstatement ensures that the return type isObservable`.

我试过这个:

    const init$ : Observable<void> = forkJoin(obsArray);

但它最多只能执行函数,而不是内部的HTTP调用.没有subscribe()调用,因为这是在分配给APP_INITIALIZER标记的Angular 工厂函数内.

我也试了concatMap()次,但没有成功.

是否有一个rxjs函数可以在等待前一个函数完成时连续执行其中的每一个函数?

我已经跟进了这一点,有this question个.

推荐答案

您还可以将数组中的所有可观测对象转换为可观测对象,实质上是将Array<Observable<T>>转换为Observable<Observable<T>>,然后使用更高阶函数concatAll:

from(obsArray).pipe(concatAll())

这是一张live demo美元.

Typescript相关问答推荐

Angular 17 -如何使用新的@if语法在对象中使用Deliverc值

为什么tsx不判断名称中有"—"的属性?'

为什么TypeScript假设文档对象始终可用?

具有动态键的泛型类型

如何提取密钥及其对应的属性类型,以供在新类型中使用?

在嵌套属性中使用Required

接口重载方法顺序重要吗?

在保留类型的同时进行深层键名转换

防止重复使用 Select 器重新渲染

如何合并两个泛型对象并获得完整的类型安全结果?

当数组类型被扩展并提供标准数组时,TypeScrip不会抱怨

使用或属性编写无限嵌套的接口

使用Type脚本更新对象属性

字幕子集一个元组的多个元素

在打印脚本中将对象类型转换为数组

我如何键入它,以便具有字符串或数字构造函数的数组可以作为字符串或数字键入s或n

如何根据Typescript 中带有泛型的对象嵌套键数组获取数组或对象的正确类型?

如何判断路由或其嵌套路由是否处于活动状态?

如何强制对象数组中的对象属性具有非空字符串值?

Typescript 中可以提前返回 Typeguard 吗?