我有同步问题
chrome.storage.local.get
有效的代码:
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
console.log('chrome.runtime.onMessage.addListener: ', message)
if (message.type === "NewURL") {
console.log('background.js: start timer')
let blockUrlList = ["youtube.com", "dict.cc"]
/*
chrome.storage.local.get(["block_urls"], (res) => {
blockUrlList = "block_urls" in res ? res.block_urls : []
})
*/
console.log(blockUrlList)
chrome.tabs.query({ "url": blockUrlList.map(p => `*://*.${p}/*`)}, (tabs) => {
tabs.forEach((tab) => {
console.log('tab.id: ',tab.id, 'tab.url:', tab.url)
})
})
}
})
但是,如果我尝试从 chrome 存储中获取 blockUrlList,我会得到空白列表。
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
console.log('chrome.runtime.onMessage.addListener: ', message)
if (message.type === "NewURL") {
console.log('background.js: start timer')
let blockUrlList = []
chrome.storage.local.get(["block_urls"], (res) => {
blockUrlList = "block_urls" in res ? res.block_urls : []
})
console.log(blockUrlList)
chrome.tabs.query({ "url": blockUrlList.map(p => `*://*.${p}/*`)}, (tabs) => {
tabs.forEach((tab) => {
console.log('tab.id: ',tab.id, 'tab.url:', tab.url)
})
})
}
})
我如何同步,即在继续 chrome.tabs.query 之前等待 chrome.storage.local.get? 我还希望 chrome.tabs.query 在继续下一行之前等待它
你可以简单地把它放到回调中:
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
console.log('chrome.runtime.onMessage.addListener: ', message)
if (message.type === "NewURL") {
console.log('background.js: start timer')
let blockUrlList = []
chrome.storage.local.get(["block_urls"], (res) => {
blockUrlList = "block_urls" in res ? res.block_urls : []
console.log(blockUrlList)
chrome.tabs.query({ "url": blockUrlList.map(p => `*://*.${p}/*`)}, (tabs) => {
tabs.forEach((tab) => {
console.log('tab.id: ',tab.id, 'tab.url:', tab.url)
})
})
})
}
})
回调,毕竟是在您喜欢的那一刻运行的,即当
get()
成功完成时。