chrome 扩展等待 chrome.storage.local.get,然后再继续下一行

问题描述 投票:0回答:1

我有同步问题

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 在继续下一行之前等待它

javascript synchronization chrome-extension-manifest-v3
1个回答
0
投票

你可以简单地把它放到回调中:

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()
成功完成时。

© www.soinside.com 2019 - 2024. All rights reserved.