setState слишком запаздывает в React

reactjs #typescript

#reactjs #typescript

Вопрос:

Я использую pdf-lib (библиотеку JS) в своем проекте React. Я выполняю тяжелую работу с библиотекой async/await и хотел бы обновить индикатор выполнения, обновив состояние. Несмотря на то, что я вызываю setState setTimeout , состояние обновляется после завершения тяжелой работы. Таким образом, индикатор выполнения показывает только 0% и 100%. Не могли бы вы любезно разобраться в этом? Я не могу поделиться своим кодом, но если хотите, я покажу немного.

Комментарии:

1. Не знаком с библиотекой, но в зависимости от того, как она реализована, это может быть возможно. Поделитесь своим кодом.

Ответ №1:

Помните, что «асинхронный» не означает, что он выполняется «параллельно». Это просто означает, что код запускается «не по порядку» контролируемым образом.

Поток вашей страницы — это всего лишь один поток, поэтому, если у вас есть длительно работающая функция, вы можете пометить эту функцию как async или запускать ее setTimeout сколько угодно, но пока выполняется код вашей функции, больше ничего не запускается (хотя в случае async : только до тех пор, пока код не достигнет await ,я предполагаю, что pdf-kit не использует).

Если вам нужно выполнить тяжелую работу, используйте service worker, который представляет собой специальный API именно для этого, выполняя тяжелые рабочие нагрузки в отдельном потоке, чтобы не блокировать поток главной страницы.