gpt4 book ai didi

angular - 如何从 Observable.from 收集发射值数组?

转载 作者:太空狗 更新时间:2023-10-29 17:29:12 26 4
gpt4 key购买 nike

所以在 Rxjs 中,我有一堆代码,

return Observable.from(input_array)
.concatMap((item)=>{
//this part emits an Observable.of<string> for each item in the input_array
})
.scan((output_array:string[],each_item_output_array:string)=>{
return output_array.push(each_item_output_array) ;
});

但显然这是错误的,扫描会破坏 concatMap 内部的代码,所以我想知道如何收集可观察的 from 运算符中每个项目的输出数组?

最佳答案

在您调用 scan 时您没有为累加器指定种子。在这种情况下,第一个值用作种子。例如:

Rx.Observable
.from(["a", "b", "c"])
.scan((acc, value) => acc + value)
.subscribe(value => console.log(value));
<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>

在您的代码段中,第一个值不是数组,因此您不能对其调用 push。要将值累积到一个数组中,您可以像这样指定一个数组种子:

Rx.Observable
.from(["a", "b", "c"])
.concatMap(value => Rx.Observable.of(value))
.scan((acc, value) => {
acc.push(value);
return acc;
}, []) // Note that an empty array is use as the seed
.subscribe(value => console.log(JSON.stringify(value)));
<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>

虽然,对于某些用例,最好不要改变数组:

Rx.Observable
.from(["a", "b", "c"])
.concatMap(value => Rx.Observable.of(value))
.scan((acc, value) => [...acc, value], [])
.subscribe(value => console.log(JSON.stringify(value)));
<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>

请注意,scan 为它接收到的每个值发出一个数组。如果您只想在可观察对象完成时发出单个数组,则可以改用 toArray 运算符:

Rx.Observable
.from(["a", "b", "c"])
.concatMap(value => Rx.Observable.of(value))
.toArray()
.subscribe(value => console.log(JSON.stringify(value)));
<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>

关于angular - 如何从 Observable.from 收集发射值数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42311674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com