JavaScript: запускать функцию в отдельном потоке с помощью Web Worker, что позволяет долгосрочным функциям не блокировать пользовательский интерфейс.

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 для округления числа до указанного количества цифр.

Оцените статью
nanomode.ru
Добавить комментарий