Ahora he pasado varias horas aquí leyendo las soluciones a este problema, así: Obtener el valor de retorno de setTimeout
Pero no puedo encontrar ninguna solución para mi problema para obtener el valor removeCount. También traté de agregar una Promesa, pero no sé cómo hacerlo con el incremento.
async function removeNeedlessNotifications(mutations) { const getResult = async () => { let removeCount = 0; mutations.forEach((v) => v.addedNodes.forEach((v, i) => setTimeout(() => { if (notificationFilter(v)) { v.querySelector("div.activity-remove.js-remove").click(); removeCount++; } }, i * 100) ) ); return removeCount; }; return await getResult(); }Use dos bucles for en su lugar para que pueda await adentro, y se vuelve trivial:
async function removeNeedlessNotifications(mutations) { let removeCount = 0; for (const mutation of mutations) { for (const node of mutation.addedNodes) { await new Promise(r => setTimeout(r, 100)); if (notificationFilter(node)) { node.querySelector("div.activity-remove.js-remove").click(); removeCount++; } } } return removeCount; }Esto devolverá una Promesa que se resuelve en la cantidad de divs en los que se hizo clic.