Я всегда видел, как Promise работает с setTimeout, но я пытаюсь сделать это на основе того, что chrome.runtime.sendMessage вернет в Promise.
У меня есть скрипт содержимого, который выполняет эту функцию после его завершения.
chrome.runtime.sendMessage({complete: true});
У меня есть фоновый скрипт, который перебирает каждый элемент в массиве и использует одно из его значений для открытия URL-адреса с помощью chrome.tabs.update.
То, что я пытаюсь сделать, это заставить асинхронную функцию ждать сообщения, которое отправляет скрипт содержимого, и продолжить следующую итерацию только после получения сообщения, хотя я не знаю, как это реализовать, поскольку я Вы видели только примеры с setTimeout.
Так и должно быть
- Открыть первый элемент в массиве и остановить
- Выполните скрипт содержимого на этой странице и выполните sendMessage в конце.
- Теперь фоновый скрипт должен ожидать получения sendMessage, прежде чем перейти к следующему элементу.
- Как только sendMessage было получено с onMessage, оно должно перейти к следующему пункту и повторить с шага 2
Это фоновый скрипт.
chrome.storage.local.get('userItems', function(result) {
console.log(result.userItems);
function delay() {
// I suppose I should do something with onMessage in the delay function
return new Promise(resolve => setTimeout(resolve, 500));
}
async function delayedLog(item) {
await delay();
console.log(item);
var url = "http://www.example.com/" + item.Category;
chrome.tabs.update({
url: url
});
}
async function processArray(array) {
for (const item of array) {
await delayedLog(item);
}
}
processArray(result.userItems);
});