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 именно для этого, выполняя тяжелые рабочие нагрузки в отдельном потоке, чтобы не блокировать поток главной страницы.