Кейс:
- текущий урл -
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) и получаем неконсистентное состояние приложения.
Кейс:
url0ns.page.go(url1)- хотим перейти наurl1ns.page.go()- хотим перерисовать текущую страницу (нам даже не важно, это будетurl0илиurl1, просто текущую)Результат (кейс воспроизводится нестабильно, но часто):
url1url0Возможные причины:
ns.page.go()выглядит схематически так:После запуска
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)и получаем неконсистентное состояние приложения.