Я успешно перенесла вычисление Excel в JS с использованием RxJS. Любые входные данные представляются как Наблюдаемые, а последующие вычисления выполняются с .map
и .combineLatest
, когда в любой формуле Excel используется более одного ввода.Другие операторы в цепочке вычислений, чем combLatest, чтобы избежать избыточных вычислений
Это отлично работает, за исключением одной проблемы. Вот упрощенный пример:
Три вход (a$=1
, b$=2
, c$=3
) используется в двух различных расчетах ($ab = $a+$b = 3
в первом, $bc = $b+$c = 5
во втором) в качестве промежуточных шагов для расчета конечного результата $abbc = $ab + $bc = 8
.
Когда $ b теперь обновляется/испускает новое входное значение (например, 4
), $ abbc вычисляется дважды - сначала, когда $ ab обновляется (приводя к неправильному результату $abbc=10
) в правильном результате 12
.
Хотя конечный результат верен, промежуточный расчет является ошибочным и избыточным. Есть ли способ только выполнить последний расчет в случае, если обновляется $b
- при этом также обновляется расчет, когда обновляется a$
или c$
(что исключало бы оператор zip). Я понимаю, что этот пример, очевидно, может быть упрощен, чтобы исключить промежуточные этапы и рассчитал $abbc
непосредственно с $a
, $b
и $c
- но в реальном живом примере это невозможно/выполнимо.
Вот пример работает в JSbin: https://jsbin.com/pipiyodixa/edit?js,console
'abbc $ = ab $ .withLatestFrom (bc $, (ab, bc) => ab + bc)' влияет на желаемое поведение, но ... Я не полностью просматриваю семантику в эта ситуация, так что это комментарий. – cartant
@cartant спасибо. К сожалению, это не сработает, так как обновления c $ будут проигнорированы до тех пор, пока не начнет выдаваться $ или b $. :-( –
Да, я вижу это сейчас. Будет интересно увидеть решение. Я могу придумать довольно неприятный взлом с участием планировщика, но ... должен быть лучший способ. – cartant