RxJS-使用自定义运算符多次订阅主题

时间:2019-02-06 10:42:26

标签: javascript rxjs observable

问题

我创建了一个主题,每当文本字段的内容更改时,该主题就会发出一个值。

关于这个主题,我计划根据发布的内容进行分析。 为此,我创建了三个订阅者,所有订阅者都订阅了该主题。

在订阅中,我运行了1个自定义运算符以进行格式化,因为我需要它进行分析。 我传递给主题的内容是一个ops数组,其中包含多个Delta(文本字段是羽毛笔编辑器字段)。

第一个运算符只是将所有内容作为字符串提取并提交。 到目前为止,这个工作正常。

第二个对象获取ops-Array并以单个值的形式发出其中的每个Delta。

quillDeltaToObservable

export const quillDeltaToObservable = () => (source) =>
new Observable(observer => {
    return source.subscribe({
        next(x) {

            for (let i = 0; i < x.length; i++) {                      
                if (x[i].insert !== "") {
                    observer.next(x[i]);
                }

            }
        },
        error(err) {
            observer.error(err);
        },
        complete() {
            observer.complete();
        },
    });
});

quillDeltaToFulltext

export const quillDeltaToFulltext = () => (source) =>
    new Observable(observer => {
        return source.subscribe({
            next(x) {
                let text = '';
                for (let i = 0; i < x.length; i++) {
                    text += x[i]['insert'];
                }
                observer.next(text.trim());
            },
            error(err) {
                observer.error(err);
            },
            complete() {
                observer.complete();
            },
        });
    });

问题

我的主题上有2个订阅,都运行quillDeltaToObservable。我所说的第二个输入有点滞后。

例如,如果我运行以下

let Subject = new ReplaySubject(1); 
Subject.next({insert: 1}, {insert: 2}); 

然后在我的订阅中

let subscriptionOne = Subject.pipe(quillDeltaToObservable)
                             .subscribe(x => console.log("One:" + x);
let subscriptionTwo = Subject.pipe(quillDeltaToObservable)
                             .subscribe(x => console.log("Two: " +x); 

我希望作为输出

One: 1
Two: 1
One: 2
Two: 2

我得到的是:

One: 1
One: 2
Two: 2

我不确定问题是否出自于错误使用的主题还是我的自定义运算符中的错误。

如果有人可以帮忙,那将太棒了!

0 个答案:

没有答案