#javascript #angular #typescript #rxjs
#javascript #угловой #машинописный текст #rxjs
Вопрос:
У меня есть несколько компонентов, использующих эту службу, и я хочу отключить время, когда я вводю одно и то же значение, но если это другое значение, пропустите его. В этом коде я хочу каким-то образом проверить, использовались ли типы ранее
from(types).pipe(
debounceTime(1000),
map(([data, type]) => {
// mapping logic
}),
)
Это очень похоже на эту проблему https://github.com/lodash/lodash/issues/2403 и я пытаюсь понять это, но я надеюсь, что все еще буду использовать код RXJS
Спасибо
Комментарии:
1. Итак, если
a
испускается, то вы запускаете adebounceTime
, и еслиa
испускается снова, тоdebounceTime
выполнит свою работу, но еслиb
испускается, то токdebounceTime
должен быть уничтожен, верно? Это означает, что если после предыдущегоb
придетa
, его пропустят, не так ли?
Ответ №1:
Одним из возможных решений может быть использование оператора для вывода как предыдущих, так и текущих значений, а затем использование оператора для сравнения значений и соответствующего удаления pairwise
debounce
:
from(types).pipe(
pairwise(),
debounce(([prev, cur]) => (prev === cur)
? timer(1000)
: EMPTY
),
map(([, cur]) => cur), // No further need for prev value
map(([data, type]) => {
// mapping logic
}),
)