- 68
- 0
我想用 promise 中返回的数据进行累加,于是应用了 rxjs 中的 mergeScan 操作符。但是在应用中发现,如果在返回的流中包含了 flatMap 过的 promise,则返回的值不会累加到累加器上面去:
const Rx = require('rxjs/Rx');
const {
of ,
} = require('rxjs');
const click$ = new Rx.Subject();
const seed = 0;
const testPromise = new Promise((resolve) => {
resolve(1);
})
const count$ = click$.mergeScan((acc, promise) => of (promise)
.flatMap(promise => promise)
.map((one) => {
console.log('acc', acc);
return acc + one
}), seed);
count$.subscribe(x => console.log('value',x));
click$.next(testPromise);
click$.next(testPromise);
click$.next(testPromise);
输出如下,累加器的值没有增加:
acc, 0
value, 1
acc, 0
value, 1
acc, 0
value, 1
但是如果去除掉 promise:
const Rx = require('rxjs/Rx');
const {
of ,
} = require('rxjs');
const click$ = new Rx.Subject();
const seed = 0;
const count$ = click$.mergeScan((acc, one) => of (one)
.map((one) => {
console.log('acc', acc);
return acc + one
}), seed);
count$.subscribe(x => console.log('value', x));
click$.next(1);
click$.next(1);
click$.next(1);
输出是:
acc, 0
value, 1
acc, 1
value, 2
acc, 2
value, 3
可以正常的工作。
请问这是什么原因呢?我该如何修复这个问题?
- 共 0 条
- 全部回答
-
樱の花が舞う 普通会员 1楼
在 Rxjs 中,mergeScan 是一个操作符,它用于将多个 Observable 串联起来,然后在 merge 运算符完成时对结果进行累积。然而,mergeScan 会忽略最后一个 Observable 的结果,因为它是一个单调的观察者。
如果你想在 mergeScan 中处理最后一个 Observable 的结果,你需要使用吸收器( accumulation operator)。吸收器是一个特殊的 Observable,它在观察者完成其所有操作后停止。吸收器允许你以不同的方式累积结果。
例如,以下代码中,我们创建了一个吸收器,然后使用 mergeScan 操作符来累积所有 Observable 的结果:
```javascript import { mergeScan } from 'rxjs/operators';
const source$ = new Observable(x => x * x); const accumulator$ = mergeScan(source$, x => x + x);
console.log(accumulator$.subscribe(value => console.log(value))); ```
在这个例子中,
mergeScan操作符接收两个 Observable,然后在它们完成时将它们合并。最后,我们使用吸收器accumulator$来累积所有 Observable 的结果。当观察者完成其所有操作时,accumulator$会停止,这意味着我们可以以不同的方式累积结果。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

