JavaScript: Упражнение-151 с решением
Напишите программу JavaScript для запуска функции в отдельном потоке с помощью Web Worker, что позволит долгим функциям не блокировать пользовательский интерфейс.
Примечание. Создайте новый Worker, используя URL-адрес объекта Blob, содержимое которого должно быть строковой версией предоставленной функции. Немедленно отправьте возвращаемое значение вызова функции обратно. Возврат обещания, прослушивание событий onmessage и onerror и разрешение данных, отправленных обратно из worker, или выдача ошибки.
ПРИМЕЧАНИЕ. Поскольку функция выполняется в другом контексте, замыкания не поддерживаются. . Функция, передаваемая в `runAsync`, становится строковой, поэтому все становится буквальным. Все переменные и функции должны быть определены внутри.
Пример решения:
HTML-код:
Запускать функцию в отдельном потоке с помощью Web Worker, позволяя долго выполняющимся функциям не блокировать пользовательский интерфейс Код JavaScript:
//# Источник https://bit.ly/2neWfJ2 const runAsync = fn => {const worker = new Worker (URL.createObjectURL (new Blob ([`postMessage (($ {fn}) ());`]), {type: 'application/javascript; charset = utf-8' })); return new Promise ((res, rej) => {worker.onmessage = ({data}) => {res (data), worker.terminate ();}; worker.onerror = err => {rej (err), worker.terminate ();};});}; const longRunningFunction = () => {let result = 0; для (пусть я = 0; я 10 ** 3). затем (console.log); //1000let outsideVariable = 50; runAsync (() => typeof outsideVariable) .then (console.log); //'undefined'
Пример вывода:
1000undefined
Блок-схема:
Живая демонстрация:
См. Pen javascript-basic-упражнение-151-1 от w3resource (@ w3resource) на CodePen.
Предыдущий: Напишите программу на JavaScript для последовательного выполнения заданного массива обещаний.
Далее: Напишите программу на JavaScript для округления числа до указанного количества цифр.