Вопрос
Я создал тему, которая выдает значение каждый раз, когда изменяется содержимое текстового поля.
По этому предмету я планирую провести анализ на основе выданного контента.Для этого я создал трех подписчиков, которые все подписались на тему.
Внутри подписок я запустил 1 пользовательский оператор, чтобы выполнить форматирование так, как мне нужно для анализа.Содержимое, которое я передаю в Subject, представляет собой ops Array, содержащий несколько Deltas внутри (текстовое поле - поле quill-editor).
Первые операторы просто извлекают все содержимое в виде строки и отправляют его.Это работает отлично до сих пор.
Второй принимает ops-Array и выдает каждую дельту в нем как одно значение.
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
Я не уверен, что проблема связана с неправильно используемым объектом или ошибкой в моем пользовательском операторе.
Было бы здорово, если кто-то может помочь!