-
Notifications
You must be signed in to change notification settings - Fork 22
Open
Description
Кейс:
- текущий урл -
url0 - вызов 1 -
ns.page.go(url1)- хотим перейти наurl1 - вызов 2 -
ns.page.go()- хотим перерисовать текущую страницу (нам даже не важно, это будетurl0илиurl1, просто текущую)
Результат (кейс воспроизводится нестабильно, но часто):
- урл изменился на
url1 - страница перерисовалась, но для состояния
url0
Возможные причины:
ns.page.go() выглядит схематически так:
ns.page.go = function(url, historyAction) {
...
return ns.page.followRoute(route)
.then(function() {
ns.page._setCurrent(route, url);
ns.page._fillHistory(url, historyAction);
...
return ns.page.startUpdate(route);
}, triggerPageErrorLoad);
};После запуска ns.page.go() запускается асинхронное действие -
ns.page.followRoute(route). Пока оно не завершится - ns.page хранит своё предыдущее состояние (ns.page.current и ns.page.currentUrl).
При этом, если кто-то запустит ns.page.go() без параметров в этот момент - параметры будут скопированы с текущего состояния ns.page - т.е. неактуальные.
В итоге второй вызов ns.page.go() перебивает первый вызов ns.page.go(url1) и получаем неконсистентное состояние приложения.
Metadata
Metadata
Assignees
Labels
No labels