问题描述
如何在继续执行代码之前等待 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 (将#修改为@)