Я опытный разработчик Ember.js. В руководствах мы можем найти пример вычисляемого свойства с полным именем (синхронно, просто, зависит от имени и фамилии). Однако в дикой природе мы можем найти множество применений вычисляемых свойств в асинхронном режиме (например, установка себя после разрешения обещаний - в то время как первый запуск и получение возвращает undefined
).
Чем больше я вижу эти асинхронные вычисляемые свойства, тем больше задаюсь вопросом: предназначались ли вычисляемые свойства для использования с асинхронным кодом? Разве это не напрашивается на неприятности?
Распространенной проблемой является то, что другое вычисляемое свойство (CP2) зависит от асинхронного CP1. CP2 получает CP1, но получает undefined
(поскольку CP1 установит свое значение позже, поскольку он асинхронный). CP2 завершает расчет с неверным значением CP2 (undefined
). CP1 устанавливает сам себя, но CP2 больше не пересчитывается (даже CP1 изменился), потому что CP2 не упоминается в шаблоне (что означало бы, что он связан, и его значение требуется все время, всегда пересчитывается при изменении CP1) - но вместо этого был на который ссылается какой-либо вызов JavaScript.
Реальным примером этого может быть расчет общей цены заказа (из интернет-магазина) на основе элементов в заказе. Вычисляемое свойство зависит от асинхронных отношений с элементами, которые могут содержать другие асинхронные отношения, например тип налога.