首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在继续执行之前等待异步chrome.storage.local.get()完成

如何在继续执行之前等待异步chrome.storage.local.get()完成
EN

Stack Overflow用户
提问于 2019-12-22 05:38:19
回答 2查看 3.6K关注 0票数 3

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

代码语言:javascript
复制
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();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-22 10:02:49

在调用continueCode()之前,您需要等待传递给chrome.storage.local.get(..)的两个回调函数都执行,而且,您可以通过一次调用检查这两个存储属性,下面是一个示例:

代码语言:javascript
复制
function getData() {
  chrome.storage.local.get(['key', 'key2'], function(result) {
    if (typeof result.key !== 'undefined') {
      object1.innerHTML = result.key.val;
    } 
    if (typeof result.key2 !== 'undefined') {
      object2.innerHTML = result.key2.val;
    } 
    continueCode();
  }
}
票数 1
EN

Stack Overflow用户

发布于 2019-12-22 10:12:54

您可以使用new Promiseasync/await来处理此问题。假设您希望同步处理chrome.storage.local.get,以便continueCode()可以拥有所需的数据。

获取数据:

代码语言:javascript
复制
  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]);
        }
      });
    });
  };

主要功能:

代码语言:javascript
复制
async function getData() {
    let key1 = await readLocalStorage('key1');
    object1.innerHTML = key1;
    let key2 = await readLocalStorage('key1');
    object1.innerHTML = key2;

    continueCode();
}

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

代码语言:javascript
复制
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();
    });
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59440008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档