Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Не гарантируется консистентность перерисовки приложения #658

Open
chestozo opened this issue Apr 19, 2018 · 3 comments

Comments

@chestozo
Copy link
Member

Кейс:

  • текущий урл - 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) и получаем неконсистентное состояние приложения.

@alexeyten
Copy link
Contributor

alexeyten commented Apr 19, 2018

Вообще, если уже запланирован переход, ns.page.go() просто не должен ничего делать. Логично?

@chestozo
Copy link
Member Author

примерно так и хотим сейчас сделать да
но есть деталь: текущий update может быть к примеру на стадии отрисовки уже
и тогда если мы поменяли данные и хотим ещё раз всё перерисовать посредством ns.page.go() - будет fail..

@Epsilonnnn
Copy link

#659

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants