JavaScript Web Worker - закрыть() vs terminate()

Я не совсем понимаю разницу между методами close() vs terminate() для Web Workers. Я читал описания здесь и, похоже, делает то же самое? http://www.w3.org/TR/workers/

Когда я буду использовать один над другим?

Ответы

Ответ 1

Метод close() отображается внутри рабочей области. Метод terminate() является частью интерфейса рабочего объекта и может быть вызван "извне".

Если вы создаете рабочего в своем основном скрипте и хотите остановить его из этого сценария, вы должны вызвать terminate() для рабочего объекта. Если вы хотите остановить работника из рабочего кода (например, как ответ на внешнее сообщение), вы должны вызвать метод close().

Источник: https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers#Terminating_a_worker

Ответ 2

Действительно функция close() видна из сферы действия Рабочего.

terminate() видна снаружи (то есть: скрипт, вызывающий рабочего, может отключить его с помощью этой функции)

TBH это немного запутывает сначала, но как только вы внедрили, вы привыкнете к этому

Ответ 3

Я нашел хороший вариант использования для self.close() over terminate. Внутри моего веб-работника у меня была функция setInterval, которая получала и отправляла обратно позицию объектов. Использование terminate навсегда убивает веб-работника, поэтому я не смог отправить сообщение воспроизведения обратно работнику. Тем временем закрывая его, я снова открыл его и перезапустил таймер.