Skip to content

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

@chestozo

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