Создание липкого реактивного значения (Тема)
Я намерен создать реактивное "значение" универсального типа T
со следующими свойствами:
- Может использоваться как наблюдаемый несколькими подписчиками.
- Первый подписчик запускает расчет стоимости.
- Любому новому подписчику отправляется последнее кэшированное значение.
- Новое значение может быть установлено извне в любое время и публикуется для всех подписчиков.
- После удаления последнего подписчика все текущие расчеты должны быть остановлены.
- Когда новое значение устанавливается внешне, любой запущенный результат расчета игнорируется.
Предполагаемое использование:
// calculates value on demand
function getValue<Number>():Observable<Number>{
// return an observable of some number, takes 1-2 seconds to calculate
}
// sticky observable of value
const value = new StickyValue<Number>(getValue);
// first subscriber triggers calculation
value.subscribe((n) => console.log(n));
// value can be set externally, the subscribers get this value ignoring any triggered calculation result
value.next(500);
// second subscriber gets value that was last set or last calculated
value.subscribe((n) => console.log(n));
Предположения: calculation()
простая функция, которая возвращает Observable значения
Из комментариев я нахожу, что BehaviourSubject
подходит близко Но это все еще не удовлетворяет условиям 2 и 6.