I'm working on Chrome extension.
I'm listening for requests with chrome.webRequest.onCompleted.addListener. After I catch request I want to put request.url into impresses in chrome.storage
chrome.webRequest.onCompleted.addListener((wr) => {    
  let wurl = wr.url;
   
  if (wurl.includes('impress')) {
    console.log(wr.url);
  chrome.storage.local.get({impresses: []}, function (result) {
  var impresses = result.impresses;
  impresses.push({url: wr.url});
  chrome.storage.local.set({impresses: impresses}, function () {
      chrome.storage.local.get('impresses', function (result) {
          console.log(result.impresses)
      });
  });
});
  }
}, {
  urls: ["<all_urls>"] },
[]);
Key impresses from chrome.storage has value [] on call
My problem is that console.log(wr.url); gives me 10 results but console.log(result.impresses) gives me only 10, sometimes less.. It should be the same.
I tried is as @wOxxOm commented but it's not working properly for me..
let queue = [];
function updateStorage() {
  if (!queue.length || updateStorage.running) {
      return;
  }
  updateStorage.running = true;
  chrome.storage.local.get('impresses', data => {
      data.impresses = [].concat(data.impresses || [], queue);
      queue = [];
      chrome.storage.local.set(data, () => {
        updateStorage.running = false;
        if (queue.length) updateStorage();
      });
  });
}
chrome.webRequest.onCompleted.addListener((wr) => {    
  let wurl = wr.url;
   
  if (wurl.includes('impress')) {
    console.log(wr.url);
    queue.push(wr.url);
    updateStorage();
  }
}, {
  urls: ["<all_urls>"] },
[]);
