Я создаю расширение Chrome, которое выполняет много асинхронной и тяжелой работы в фоновом режиме. Он загружает множество изображений из Интернета, преобразует их, а затем сохраняет их в формате ZIP. Время, необходимое для завершения всего этого, может превышать 1 минуту.
Я заметил, что иногда, к сожалению, расширение не завершает работу, и фоновая страница становится неактивной, и выполнение останавливается. Когда у меня открыта фоновая страница, этого никогда не происходит - это происходит только тогда, когда она закрыта.
Я инициирую работу в фоновом скрипте сообщением из скрипта контента. Кажется, что если я предоставляю обратный вызов 'sendResponse', а в фоновом режиме указывает, что я жду ответа с возвращаемым значением 'true', это работает:
chrome.runtime.onMessage.addListener( (message, sender, sendResponse) => {
if (message.action === 'download') {
downloadAction(data, type).then(r => {
console.log('finished');
sendResponse('success');
})
}
return true;
})
Когда я не делаю ' не может вернуть 'true', это не так. Так это правильный способ выполнения длинного асин c кода в фоновом режиме, даже если я не заинтересован в ответе? Или это просто обходной путь, который срабатывает?
Кажется, есть предел того, как долго расширение будет работать в фоновом режиме, когда инициируется сообщением без return true;
Как насчет инициирования с сигналом тревоги? Кроме того, есть ли предел того, как долго он будет работать, если я укажу, что ожидаю ответа с return true;
? Конечно, это не позволит мне бесконечно запускать фоновый скрипт?