等待从storageArea收集数据

时间:2019-01-27 20:24:38

标签: javascript google-chrome-extension firefox-webextensions

从存储收集数据时,我遇到了问题。我在后台脚本中有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);
});

所以我的问题是:我怎样才能等待数据被收集然后才继续进行?也许我不应该等待事件,而应该创建某种“事件链” 或回调?我不确定如何组织这个。 非常感谢您的帮助!

2 个答案:

答案 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::*