Вам не нужно звонить 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 досрочно, или если пользователь нажал кнопку «Отмена»).