创建lettable rxjs" string.split"操作者

时间:2018-01-02 23:25:55

标签: rxjs rxjs5 rxjs-lettable-operators

我试图在string中进行一些rjxs操作,而我可以使用string类中的内置行为来完成它array中的Javascript课程,我希望将其用作练习,以便更多地了解rxjs并更好地理解流畅的代码流。

为此,我发现了一种方法,我发现了一种适合fluent解决方案的方法,而不是像我在大多数{{1}中看到的一系列变量赋值例子。

基本上,这就是情况;我有一串文字;

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发送到rxjs,但我有一个非常令人不安的时间抓住如何从那里真正对待它过度嵌套到Observable运算符中。

例如,如果我这样做......

map

可以开始看到我正在寻找的东西,但我真正想做的是......

of(example.string.split('\n')).pipe(
   map(results => results.toString().split('||')),
   map(results => ... ),
   ...
).subscribe();

阅读documentation on lettable operators, seen here,看起来这应该是一个非常容易创建的东西。从理论上讲,它应该在我的脑海里看起来像这样;

of(example).pipe(
   split('\n'),
   split('||'),
   concatMap(results => ...)
).subscribe();

所以这应该使整个代码足够明显;

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}`)); 行,但是如果输出它,我会得到......

  

[n] ::,key ||价值,关键||价值,关键||价值,
  价值,价值,价值,关键|| key [key1] = value |   key [key2] = value,key ||值,

我真的不清楚我做错了什么,这里。由于很难在arrayrxjs等大多数代码游乐场中展示plunkr,至少据我所知,我已经准备好了一个游乐场环境来展示我的工作jsfiddle,如果有帮助的话。

您将在stackblitz文件中找到所有相关代码。我已经尽了最大的努力来抽象出对任何角度知识的需要,因为我已经煞费苦心地指定了应该留下的部分,以使其继续显示输出在右侧。如果你不知道角度,但可以帮助playground/index.ts,你应该能够工作,而不会打扰这种设置。

STACKBLITZ PLAYGROUND

1 个答案:

答案 0 :(得分:1)

您的代码运行正常,只需将es6模板字符串$ {}压平为一个字符串。如果您使用console.dir或记录结果,您将看到检索到正确的数组。