JavaScript Worker.terminate() — зупинити фоновий потік
Метод terminate() негайно вбиває робітника — без жодних попереджень.
Загальний опис
Це не ввічливе прохання завершитись, а обрив. Код усередині зупиняється посеред виконання, у довільній точці. Ніякого finally, ніякого прибирання — робітник просто перестає існувати.
Звідси наслідок: якщо він писав щось у IndexedDB чи надсилав запит, операція лишиться обірваною. Для важливих речей потрібен ввічливий шлях: надіслати команду «завершуйся», дати робітнику прибрати за собою й самому покликати self.close().
Але для скасування важкого обчислення terminate() — саме те: користувач передумав, і чекати немає сенсу.
Після виклику робітник мертвий назавжди: для нової роботи потрібен новий new Worker().
- Нотатка
-
Обрив миттєвий і безжальний. Якщо робітник мав щось зберегти чи закрити — воно не збережеться й не закриється.
автор: NagarD
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| terminate | 4+ | 3.5+ | 4+ | 11.5+ | 12+ | 10+ |
| Переглядач | ||||
|---|---|---|---|---|
| terminate | 4.4+ | yes | yes | 5+ |
Приклади
+ запропонувати свій приклад у пісочниці
Кнопка «Скасувати» для важкого обчислення.
HTML
<button id="start">Порахувати</button>
<button id="cancel">Скасувати</button>
JS
let worker = null;
start.addEventListener('click', () => {
worker = new Worker('/heavy.js');
worker.onmessage = event => {
console.log('Результат:', event.data);
worker.terminate();
worker = null;
};
worker.postMessage({ size: 1e9 });
});
cancel.addEventListener('click', () => {
// обрив посеред обчислення — миттєво
worker?.terminate();
worker = null;
});
Коментарі
Коментарів ще немає — будьте першим!