gpt4 book ai didi

javascript - Chrome Extensions 同步调用 - 仅在窗口关闭后创建窗口

转载 作者:行者123 更新时间:2023-12-04 02:14:30 25 4
gpt4 key购买 nike


我有这段代码:

function voteNewWindow(mailNum) {
chrome.windows.create({
url: 'http://www.google.com',
incognito: true
}, function (window) {
console.log('created ' + window.id);
chrome.tabs.query({
active: true,
windowId: window.id
}, function (tabs) {
var tab = tabs[0];
chrome.tabs.executeScript(tab.id, {
file: "jquery-2.1.1.min.js"
}, function () {
chrome.tabs.executeScript(tab.id, {
file: "content_script.js"
}, function () {
chrome.tabs.sendMessage(tab.id, {
email: JSON.parse(localStorage.mailList)[mailNum]
}, function (response) {
console.log(response);
chrome.windows.remove(window.id);
console.log('window ' + window.id + " removed");
});
});

});
});

});
}


function execute() {

for (var i = 0; i < JSON.parse(localStorage.mailList).length; i++) {

voteNewWindow(i);
}
}

问题是所有窗口同时打开。我希望只有当前面的窗口关闭时,窗 Eloquent 会打开。我希望 voteNewWindow() 在另一个 voteNewWindow() 执行之前完成它必须做的所有事情。
任何帮助,将不胜感激。谢谢

最佳答案

JavaScript Promises来救援!

function voteNewWindow(mailNum) {
return function(){
return new Promise( function (resolve, reject){
chrome.windows.create({
/* ... */
}, function (response) {
console.log(response);
chrome.windows.remove(response.id);
console.log('window ' + response.id + " removed");
resolve(); // Proceed to the next
});
/* ... */
}
}
}

function execute() {
var sequence = Promise.resolve();
for (var i = 0; i < JSON.parse(localStorage.mailList).length; i++) {
sequence = sequence.then(voteNewWindow(i));
}
}

参见 this section了解这里发生的事情。基本上,我们正在创建一个由 then 粘合在一起的 Promise 链,以确保下一个 Promise 仅在前一个完成后才开始执行。

如果您需要在execute() 之后执行任何其他操作,请将其放在序列的末尾:

function execute(callback) {
var sequence = Promise.resolve();
for (var i = 0; i < JSON.parse(localStorage.mailList).length; i++) {
sequence = sequence.then(voteNewWindow(i));
}
sequence.then(callback);
}

关于javascript - Chrome Extensions 同步调用 - 仅在窗口关闭后创建窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24821829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com