foreach inside foreach,结果为空可能是因为异步调用
Foreach inside foreach, result is empty probably because of async call
变量 ntabs 最终是空的,我如何更改此代码(可能使用 Q 或异步库)以使其正常工作
var actions = [..];//array of objects
var ntabs = [];//arr where i put results
actions.forEach(function(a) {
chrome.tabs.query({url: a.url}, function(tabs) {
tabs.forEach(function(tab) {
var t = {
id: tab.id,
title: tab.title,
url: tab.url,
faviconUrl: tab.favIconUrl,
actions: a.actions
}
ntabs.push(t);
});
});
});
console.log(ntabs);//result is empty
函数chrome.tabs.query
是异步函数。您应该添加一个计数器,它将在最后一个查询完成时执行其余代码。
var actions = [{
url: '
}, {
url: 'chrome://extensions/?id=ehlnpfcjcalccnjondlokficpbkiefdk'
}];
var n = actions.length;
var ntabs = [];
actions.forEach(function(a) {
chrome.tabs.query({
url: a.url
}, function(tabs) {
tabs.forEach(function(tab) {
var t = {
id: tab.id,
title: tab.title,
url: tab.url,
faviconUrl: tab.favIconUrl,
actions: a.actions
}
ntabs.push(t);
});
if(--n === 0) onQuery();
});
});
function onQuery() {
console.log(ntabs);
}
变量 ntabs 最终是空的,我如何更改此代码(可能使用 Q 或异步库)以使其正常工作
var actions = [..];//array of objects
var ntabs = [];//arr where i put results
actions.forEach(function(a) {
chrome.tabs.query({url: a.url}, function(tabs) {
tabs.forEach(function(tab) {
var t = {
id: tab.id,
title: tab.title,
url: tab.url,
faviconUrl: tab.favIconUrl,
actions: a.actions
}
ntabs.push(t);
});
});
});
console.log(ntabs);//result is empty
函数chrome.tabs.query
是异步函数。您应该添加一个计数器,它将在最后一个查询完成时执行其余代码。
var actions = [{
url: '
}, {
url: 'chrome://extensions/?id=ehlnpfcjcalccnjondlokficpbkiefdk'
}];
var n = actions.length;
var ntabs = [];
actions.forEach(function(a) {
chrome.tabs.query({
url: a.url
}, function(tabs) {
tabs.forEach(function(tab) {
var t = {
id: tab.id,
title: tab.title,
url: tab.url,
faviconUrl: tab.favIconUrl,
actions: a.actions
}
ntabs.push(t);
});
if(--n === 0) onQuery();
});
});
function onQuery() {
console.log(ntabs);
}