在等待突变观察者的响应时暂停 javascript for 循环?

Pause javascript for-loop while waiting for response from mutation observer?

这可能是一种不寻常的情况,但我正在编写一个 Chrome 扩展程序来遍历网页上的元素。为此,我将使用 for 循环遍历主要 div 的子项,如下所示:

function grab_data() {
    //element in the DOM which contains the transcript history
    var parent_elem = document.querySelector("#yDmH0d > c-wiz > div > div.jkOv3d > c-wiz:nth-child(4) > c-wiz > c-wiz > div > div:nth-child(1)");
    for (let i = 0; i < (parent_elem.children.length); i++) {
        if (parent_elem.children[i].hasAttribute("data-timestamp")) {
            //regular case, handle data normally
            some_code();
        }
        else {
            // this is the special case, click a button and the mutation observer will be triggered
            example_button.click();
        }

在 else 块中,我需要等待变异观察者的回调函数中抓取的数据,然后再继续循环的下一次迭代。这可能吗?我该怎么做呢?

可以使用 promises 实现该行为。

function asyncFunction(i){
    setTimeout(() => {
            console.log(i);
        }, 500 * i);
}

async function mainLoop() {
    for(let i = 0; i < 10; i++){
       await asyncFunction(i);
    }
}

mainLoop()

其中 asyncFunction 是您的回调。

这样你的主循环就会等到回调被解决。不过,我不确定这是否是一个好习惯。