V4Fire / Client

V4Fire client core library
MIT License
22 stars 14 forks source link

async.request не отменяется при вызове clearAll с group #1317

Open shining-mind opened 5 days ago

shining-mind commented 5 days ago

Выявили баг в b-virtual-scoll-new:

  1. Начинается запрос в методе initLoadNext (который загружается следующий чанк для выдачи)
  2. Страница деактивируется
  3. Страница активируется и вызывается метод reload (если задан проп reloadOnActivation)
  4. В результате вызова reload у b-virtual-scroll-new вызывается метод reset, который очищает состояние компонента, и вызывает clearAll, который должен был уничтожить все потоки.
  5. Размораживается поток initLoadNext (важно данный поток не имеет постфикса :suspend), который загружает данные последнего чанка с предыдущей выдачи, в стейт записывается, что все данные загружены.
  6. Затем загружаются данные в результате reload, но в стейте уже стоит пометка, что все данные были загружены.

Это приводит к тому, что выдача пустая. Скорей всего это связано с наличием ререндера в v4v4.

P.s. в мастере поток тоже не отменяется, однако данные есть, предположительно это старые данные с предыдущего рендера до деактивации.

shining-mind commented 5 days ago

Как воспроизвести в КБ:

  1. Авторизоваться под общим тестовым пользователем (либо под своим, главное, чтобы было много данных)
  2. Открыть веб версию в дев режиме
  3. Выполнить скрипт:
    document.getElementById('root-component').component.router.push('cb-transactions'); // или cb-checks
    // Важно задать правильную задержку, таким образом повысится вероятность, что чанк начнёт загружаться до деактивации страницы
    setTimeout(() => {
    document.getElementById('root-component').component.router.push('cb-index');
    }, 1000);
  4. Кликнуть на табик "переводы" (выдача должна отсутствовать, если нет, то стоит попробовать ещё раз)