Skip to content

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

Description

@chestozo

Кейс:

  • текущий урл - 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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions