javascript - 使用 Chrome 扩展程序/JavaScript 循环遍历 URL 数组
问题描述
我正在尝试遍历 URL 数组并在每个 URL 上运行一个函数。该代码正在运行,但它仅针对第一个 URL 运行。
这是 popup.js(相关代码所在的位置):
document.addEventListener('DOMContentLoaded', function () {
document.querySelector('#scanInventory').addEventListener('click', getInventory, false);
async function getInventory () {
for (let page = 1; page < 5; page++) {
await new Promise((resolve) => {
let url = `https://example.com?page=${page}`;
chrome.tabs.update({ url, active: true }, (tab) => {
chrome.tabs.onUpdated.addListener(function onUpdated(tabId,info) {
chrome.tabs.query({
currentWindow: true, active: true},
function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, 'getInventory');
})
})
});
});
};
}
}, false)
如何让循环继续通过第一项?
解决方案
你不调用解析函数来验证工作结束,所以它卡在第一个
这是一个小例子,展示了如何运行并发或顺序作业集的承诺
function job( i, type ){
console.log( type,"[ launch job #",i )
return new Promise( (resolve, reject) => {
setTimeout( ()=>{
console.log( type, "[ job #",i,"done" );
resolve( true );
}, i*1000 );
} );
}
async function concurrentPromise( n ){
let promiseArray = [];
while(n) promiseArray.push( job( n--, "concurrent" ) );
await Promise.all( promiseArray )
.then( results => {
console.log("concurrent, all done!\n", results );
} );
}
async function sequentialPromise( n ){
let results = [];
while(n) results.push( await( job( n--, "sequential" ) ) );
console.log("sequential, all done!\n", results );
}
concurrentPromise( 5 ) ;
sequentialPromise( 5 ) ;
推荐阅读
- java - Wsimport from jaxws-tools:3.0.0 在 ClassNotFoundException 上崩溃
- arrays - 我的问题是,如何在 c 中遍历一个元素后忽略它
- git - 即使删除了分支,AWS CodeCommit 也会保留未引用的二进制 blob
- flutter -
' 不是类型 'List 的子类型 '颤动 - python - 使用 Selenium 关闭网页上的第一个弹出窗口
- python - Microsoft MSAL 是否具有资源所有者密码凭据授予授权支持?
- python - 用它们的乘法列表替换数字列表
- javascript - 在 React 中使用 canvas html5 的清晰方法,无需始终渲染所有画布形状
- node.js - 在 reactjs 中过滤表数据
- json - 在 dart 中显示 itams 的问题