【发布时间】:2018-01-02 23:25:54
【问题描述】:
我正在尝试在rjxs 中进行一些string 操作,虽然我可以通过string 类和@ 中的array 类的内置行为来完成它987654327@,我想以此作为练习,进一步了解rxjs 并更好地理解流利的代码流。
为此,我必须找到一种适合fluent 解决方案的方法,而不是像我在大多数rxjs 示例中看到的一系列变量赋值。
基本上,情况就是这样;我有一个文本字符串;
const example = `
key || value
key || value
key || value
value
value
value
key || key[key1] = value | key[key2] = value
key || value
`;
我需要做的第一件事是使用string.split('\n')创建一个字符串数组,这样我就可以遍历每一行并执行进一步的操作。
example.string.split('\n') 确实给出了预期的结果,但是尝试将其发送到rxjs 开始得到相当混合的收益。使用pipe 方法,我知道我将结果作为Observable 发送到rxjs,但是我很难掌握如何从那里真正处理它而不过度嵌套到map 运算符中.
例如,如果我这样做...
of(example.string.split('\n')).pipe(
map(results => results.toString().split('||')),
map(results => ... ),
...
).subscribe();
我可以开始了解我正在寻找的东西,但我真正想做的是......
of(example).pipe(
split('\n'),
split('||'),
concatMap(results => ...)
).subscribe();
阅读documentation on lettable operators, seen here,看起来这应该是一件很容易创建的事情。理论上我的想法应该是这样的;
const split = (separator: string) => <T>(source: Observable<T>) =>
new Observable(observer => {
source.subscribe({
next(x) { observer.next(x.toString().split(separator)); },
error(err) { observer.error(err); },
complete() { observer.complete(); }
})
});
所以这应该使整个代码足够明显;
of(example).pipe(
split('\n')
).subscribe(result => console.log(`[n]::${result}`));
但这并没有给我我真正的期望。我希望得到array 的行数,但如果我输出它,我会得到...
[n]::, 键 ||值,键 ||值,键 ||值, ,
价值、价值、价值、关键 ||键[键1] = 值 | 键[键2] = 值,键 ||价值,
我真的不清楚我做错了什么,在这里。由于很难在大多数代码游乐场(如plunkr 或jsfiddle)中演示rxjs,至少据我所知,我已经准备了一个游乐场环境来演示我在stackblitz 上的工作,如果有帮助的话。
您将在playground/index.ts 文件中找到所有相关代码。我已尽我所能抽象出对角度的任何知识的需求,因为我煞费苦心地指定了应该单独保留的部分,以使其继续在右侧显示输出.如果您不了解 Angular,但可以通过 rxjs 提供帮助,您应该能够在不干扰该设置的情况下工作。
STACKBLITZ PLAYGROUND
【问题讨论】:
标签: rxjs rxjs5 rxjs-lettable-operators