asynchronous - 如何在继续执行之前等待异步 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();
}
解决方案
您可以使用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();
});
}
推荐阅读
- html - 更改过滤器选项突出显示颜色 HTML
- mysql - 查询中的 2 个替换变量并首先执行第二个替换变量
- excel - 使用 Excel VBA 解析来自 ITIS 的 XML 响应
- python - Pygame无响应显示
- java - 有没有办法使用 Java 11 的 HttpClient 从 HTTP 1.1 响应的状态行中获取原因短语?
- django - 当我尝试使用英语以外的任何语言进行搜索时出现服务器错误 (500)
- isabelle - 如何在 Isabelle 中证明“(⋀x. PROP ?P x) ⟹ PROP ?P ?x”?
- java - 如何在 Spring Boot War 中包含特定的 applicaction.properties
- python - 如何撤消 QAbstractTableModel 中的更改?
- postgresql - 如何在 jsonb 字段属性上使用 group_by 查询最新条目