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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions