如何等待 chrome.tabs.query?

问题描述

如何在继续执行代码之前等待 chrome.tabs.query 结果?

我有这个代码,我已经尝试了很多东西,但我想不出一种方法让 chrome.tabs.query 上的代码在继续之前完全执行。注释“LOG (background.js) clickGoButton done”总是首先出现在控制台上......

所有这些代码都在 background.js 中,在我按下扩展弹出窗口中的按钮后它就会运行。

function clickGoButton(){
chrome.tabs.query({currentwindow: true,active: true},async (tabs) => {
    const promiseArray = tabs.map(tab => {
        return execScript(tab);
    });

    const result = await Promise.all(promiseArray);
    console.log(result);
    console.log("Done");
})

chrome.extension.getBackgroundPage().console.log("LOG (background.js) clickGoButton done");
}

const execScript = (tab) => {
return new Promise((resolve,reject) => {
    /* Getting the selected text on the tab and saving into the result variable */
    chrome.tabs.executeScript(tab.id,{ code: `document.getSelection().toString()` },(result) => {

        /* Removing break lines from the selected text,saving the cleaned text on the group variable */
        var group = result[0].replace(/(\r\n|\n|\r)/gm,"");

        /* Selecting the chrome last focused tab */
        chrome.tabs.query({ active: true,lastFocusedWindow: true },function (tabs) {

            var param = "userNTID"
            var address = tabs[0].url;
            var domain = (new URL(address));

            var url_parameter = address.substr(address.indexOf(param))  
            var username = url_parameter.substring(url_parameter.lastIndexOf("=") + 1);
            chrome.storage.local.set({username: username},function() {});
        });

        /* Multidimensional array containing the VDI Groups */
        var groups = []; // removed to keep short

        for (var i = 0; i < groups.length; i++) {
            chrome.extension.getBackgroundPage().console.log(groups[i][0]);

            if(groups[i][0] === group){

                chrome.storage.local.set({ad_group: groups[i][0]},function() {});
                chrome.storage.local.set({farm: groups[i][1]},function() {});
                chrome.storage.local.set({pool: groups[i][2]},function() {});
                chrome.storage.local.set({assignment: groups[i][6]},function() {});
                chrome.storage.local.set({source: groups[i][5]},function() {});
                chrome.storage.local.set({machine: ''},function() {});
            }
        }
        resolve("Done");
    });
});
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...