首页 > 解决方案 > 来自可观察的到可观察的[]

问题描述

我正在尝试从外部 API 获取数据包;通过一个 httprequest 我得到一个Observable<T[]>.

在等待请求完成时,我计划创建一个“占位符”,将来会得到那些 T,所以我想为每个占位符分配一个Observable<T>.

如果我在 a 中分配 T

request.pipe(map(array => foreach(item of array) {createPlaceholder(item)})

占位符将在获取数据后创建,使“占位符”概念毫无意义;所以我考虑将 转换Observable<T[]>为 aObservable<T>[]并将每个 observable 分配给一个新数组,但是在网上搜索我只能找到相反的(Observable<T>[]to Observable<T[]>)。

有没有办法将 a 转换Observable<T[]>为 a Observable<T>[]

标签: angularrxjs

解决方案


您不能对通用数组长度执行此操作。

T[] 的长度在程序开始时是未知的,它甚至可能会起泡。所以你不能为此使用数组。

只有当您知道数组的长度(您可以在打字稿中将其建模为元组类型)时,您才能像这样创建可观察对象:

const serverResponse$: Observable<[T, T, T]> = ...;
const myObservables$: [Observable<T>, Observable<T>, Observable<T>] = [
  serverResponse$.pipe(map(r => r[0])),
  serverResponse$.pipe(map(r => r[1])),
  serverResponse$.pipe(map(r => r[2]))
];

推荐阅读