在等待突变观察者的响应时暂停 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 是您的回调。
这样你的主循环就会等到回调被解决。不过,我不确定这是否是一个好习惯。
这可能是一种不寻常的情况,但我正在编写一个 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 是您的回调。
这样你的主循环就会等到回调被解决。不过,我不确定这是否是一个好习惯。