从存储收集数据时,我遇到了问题。我在后台脚本中有onMessage事件监听器,等待特定的事件。如果收到此事件-我需要从storageArea收集一些数据,然后将其发送到内容脚本。我的问题是我需要等待该数据被收集(成功与否),然后才继续发送数据。如果我尝试从storageArea回调发送它-我的内容脚本什么都没收到。如果我只是继续->脚本继续,并且不等待数据收集,那么我的内容脚本又什么也没收到。贝娄是用来说明我的问题的伪代码:
browser.runtime.onMessage.addListener(function(request, sender, sendResponse) {
//get the data from the storageArea
var storageData = {};
browser.storage.local.get("myData", function (data) {
//modify storageData here
});
//send response ONLY when the data is finished loading(successfully or not)
sendResponse(storageData);
});
所以我的问题是:我怎样才能等待数据被收集然后才继续进行?也许我不应该等待事件,而应该创建某种“事件链” 或回调?我不确定如何组织这个。 非常感谢您的帮助!
答案 0 :(得分:2)
browser.storage.local.get()
返回一个Promise
,而chrome.storage.local.get()
返回一个回调函数。
您可以选择自己喜欢的方式。
然后答应()
browser.runtime.onMessage.addListener((request, sender, sendResponse) => {
//get the data from the storageArea
browser.storage.local.get('myData')
.then (storageData => {
// do wathever with storageData
sendResponse(storageData);
})
catch(error => console.log(error)); // in case of error
});
异步/等待
browser.runtime.onMessage.addListener(async (request, sender, sendResponse) => {
//get the data from the storageArea
let storageData = await browser.storage.local.get('myData');
// do wathever with storageData
sendResponse(storageData);
});
回调函数
browser.runtime.onMessage.addListener((request, sender, sendResponse) => {
//get the data from the storageArea
chrome.storage.local.get('myData', storageData => {
// do wathever with storageData
sendResponse(storageData);
});
});
答案 1 :(得分:-1)
您可以在下面的示例中找到
EXCLUDE_SYMBOLS = detail::*,*::detail::*