веб-работник закрывает себя после завершения кода? - PullRequest
0 голосов
/ 05 октября 2018

если я позволю веб-работнику запустить функцию.он закроется после завершения функции?

(function(){a = 3+2;})();

или мне нужно будет явно закрыть этого веб-работника, вызвав функцию close () веб-работника?

1 Ответ

0 голосов
/ 05 октября 2018

Вам не нужно звонить close() или terminate() на веб-работников.Веб-работники автоматически убираются, когда выпадают из области видимости, как и большинство объектов JavaScript.Итак, в вашем примере, если ваш веб-работник выглядел так:

onmessage = function(e) {
    postMessage(3 + 2);
}

И вы назвали его из своего основного скрипта следующим образом:

function doAThing() {
    var myWorker = new Worker('worker.js');
    myWorker.postMessage();
    myWorker.onmessage = function(e) {
        console.log('Message received from worker', e.data);
    };
}

Работник прекратил бы выполнение после того, как опубликовалвернуть результат 3 + 2, но он все еще будет в памяти и будет вызываться до тех пор, пока переменная myWorker не выйдет из области видимости.

В этом примере вы больше не сможете вызывать работника послеdoAThing() завершено, и сборщик мусора должен очистить работника после завершения doAThing() и вызова обратного вызова сообщения, поскольку в этот момент ничто больше не будет иметь ссылку.

Случай, когда вам нужноЧтобы позвонить на номер close() или terminate(), нужно выполнить долгосрочное задание, которое вы хотите завершить досрочно (например, хотите завершить запрос XHR досрочно, или если пользователь нажал кнопку «Отмена»).

...