RxJS减少功能值参数返回整个arr而不是正常的减少功能

时间:2019-11-15 03:42:36

标签: javascript angular rxjs

我现在正在开发Angular应用,并且想要调用一个返回用户数组(假定)的服务

服务的响应就像

[{id: 1, name: 'foo'}, 
 {id: 2, name: 'bar'}]

我想基于上一个对象计算每个项目,所以我出来使用REDUCE函数替换数组中的所有对象,而ITEM对象只是将所有数组返回给我而不是一个,所以我尝试返回最后一个检查结果的项目。

of(users).pipe(
  reduce((arr, item)=>item, [])
).subscribe(r=>console.log(r))
// [{id: 1, name: 'foo'}, {id: 2, name: 'bar'}]

但是我尝试使用普通的reduce函数,它会返回

users.reduce((arr, item)=>item), [])
// {id: 2, name: 'bar'}

这是我关于stackblitz https://stackblitz.com/edit/rxjs-e97p4c?devtoolsheight=60

的示例

1 个答案:

答案 0 :(得分:1)

因为RxJS随时间返回值。另一方面,数组正在遍历数组值。因此,当您使用RxJS时,返回item将导致返回整个数组对象。

如果您有加班的价值,那就会有所不同。下面的代码显示了代码在数组中的样子。

interval(1000).pipe(
 take(2),
 map(x=>users[x]),
 reduce((arr,item)=>item)
).subscribe(x=>console.log('l',x))