В разделе кода, который устанавливает текст на Finished
, пусть он вызывает функцию resolve
конструктора Promise, который назначен в l oop. Затем в l oop создайте Обещание и await
его. Например:
let resolveFn = () => undefined;
// ...
// Run loop:
(async () => {
// ...
for ( // ...
// ...
if (state !== 'Finished') {
const prom = new Promise(resolve => resolveFn = resolve);
document.querySelector(...).click();
await prom;
}
}
})();
// ...
function clickHandler() {
// ...
// At the point where you assign "Finished", call the resolveFn:
span.textContent = 'Finished';
resolveFn();
}
Если у вас нет контроля над кодом, который присваивает текст Finished
, другой возможностью следить за изменением текста будет использование MutationObserver, например:
if (state !== 'Finished') {
document.querySelector(...);.click();
await new Promise((resolve) => {
new MutationObserver((_, observer) => {
if (span.textContent === 'Finished') {
observer.disconnect();
resolve();
}
})
.observe(span, { childList: true });
});
}