首页 > 解决方案 > 如何在继续执行之前等待异步 chrome.storage.local.get() 完成

问题描述

我有两个电话chrome.storage.local.get()。在继续执行我的 chrome 扩展的其余代码(调用函数)之前,我需要完成这些调用continueCode(),但我不确定如何执行此操作,这是我的代码。

function getData() {
    chrome.storage.local.get(['key'], function(result) {
        if (Object.values(result)[0] != undefined) {
            object1.innerHTML = Object.values(result)[0].val;
        }
    });

    chrome.storage.local.get(['key2'], function(result) {
         if (Object.values(result)[0] != undefined) {
             object2.innerHTML = Object.values(result)[0].val;
         }
    });

    continueCode();
}

标签: asynchronousgoogle-chrome-extensiongoogle-chrome-storage

解决方案


您可以使用new Promise,async/await来处理这个问题。假设您要chrome.storage.local.get同步处理,以便continueCode()可以拥有所需的数据。

获取数据:

  const readLocalStorage = async (key) => {
    return new Promise((resolve, reject) => {
      chrome.storage.local.get([key], function (result) {
        if (result[key] === undefined) {
          reject();
        } else {
          resolve(result[key]);
        }
      });
    });
  };

主功能:


async function getData() {
    let key1 = await readLocalStorage('key1');
    object1.innerHTML = key1;
    let key2 = await readLocalStorage('key1');
    object1.innerHTML = key2;

    continueCode();
}

或者如果你不熟悉async/await行为。您可以将这两个承诺包装到一个数组中并使用Promise.all,如下所示:

function getData() {
    const key1 = readLocalStorage('key1');
    const key2 = readLocalStorage('key2');

    Promise.all([key1, key2]).then(values => {
        object1.innerHTML = values[0];
        object2.innerHTML = values[1];

        continueCode();
    });
}

推荐阅读