使用可管道运算符时我可以跟踪值吗?
Can I keep track of a value when using pipeable operators?
有没有办法通过管道操作符跟踪值?
举个具体的例子,假设我想:
在数据流上 S:
- 记忆S当前数据
- 发出 HTTP 请求
- 处理响应
- 使用操作结果发出另一个 HTTP 请求
- 创建一个包含基于 1. 和响应
的值的对象
然后合并这些并利用我创建的对象。
基本上,
const data = from([1, 2, 3]).pipe(
// Memorize here
map(a => req1(a)),
flatMap(a => a),
map(b => syncOp(b)),
map(c => req2(c)),
flatMap(d => d),
map(e => ({id: _memorized_, value: e}))
merge(data).subscribe(f => console.log(f.id, f.value))
如有任何意见,我们将不胜感激。
注意:如果可能的话,我宁愿不要通过在顶部创建一个对象来将我需要的值一路向下携带。
您可以轻松地做到这一点,只需重组您的运算符并将 memorized
设为局部变量即可:
const data = from([1, 2, 3]).pipe(
// Memorize here
mergeMap(memorized => req1(memorized).pipe(
flatMap(a => a),
map(b => syncOp(b)),
map(c => req2(c)),
flatMap(d => d),
map(e => ({id: memorized, value: e}))
));
merge(data).subscribe(f => console.log(f.id, f.value));
有没有办法通过管道操作符跟踪值?
举个具体的例子,假设我想:
在数据流上 S:
- 记忆S当前数据
- 发出 HTTP 请求
- 处理响应
- 使用操作结果发出另一个 HTTP 请求
- 创建一个包含基于 1. 和响应 的值的对象
然后合并这些并利用我创建的对象。
基本上,
const data = from([1, 2, 3]).pipe(
// Memorize here
map(a => req1(a)),
flatMap(a => a),
map(b => syncOp(b)),
map(c => req2(c)),
flatMap(d => d),
map(e => ({id: _memorized_, value: e}))
merge(data).subscribe(f => console.log(f.id, f.value))
如有任何意见,我们将不胜感激。
注意:如果可能的话,我宁愿不要通过在顶部创建一个对象来将我需要的值一路向下携带。
您可以轻松地做到这一点,只需重组您的运算符并将 memorized
设为局部变量即可:
const data = from([1, 2, 3]).pipe(
// Memorize here
mergeMap(memorized => req1(memorized).pipe(
flatMap(a => a),
map(b => syncOp(b)),
map(c => req2(c)),
flatMap(d => d),
map(e => ({id: memorized, value: e}))
));
merge(data).subscribe(f => console.log(f.id, f.value));