
本文介绍在 Chrome 扩展(Manifest V3)中,如何用一行 await 语句批量读取多个 chrome.storage.local 键值,避免重复异步调用,提升代码简洁性与执行效率。
本文介绍在 chrome 扩展(manifest v3)中,如何用一行 `await` 语句批量读取多个 `chrome.storage.local` 键值,避免重复异步调用,提升代码简洁性与执行效率。
Chrome 扩展的 chrome.storage.local.get() API 是异步的,无法像同步 localStorage.getItem() 那样直接赋值返回。但与其为每个键单独封装 Promise、链式调用 .then() 或嵌套 await,更高效的方式是一次性批量读取多个键——这不仅减少 I/O 开销,还能显著简化逻辑。
在 Manifest V3 中,chrome.storage.local.get() 已原生支持 Promise(无需手动包装),且接受字符串数组作为参数。调用后,它会返回一个包含所有请求键的对象(未设置的键默认为 undefined),配合解构赋值可实现极简写法:
// ✅ 推荐:单次调用,批量读取,自动解构
async function loadSettings() {
const { settingsSelfDiscard, settingsCompactToolbar } =
await chrome.storage.local.get([
'settingsSelfDiscard',
'settingsCompactToolbar'
]);
// 直接赋值,undefined 自动转为 null(按需处理)
selfDiscard = settingsSelfDiscard ?? null;
compactToolbar = settingsCompactToolbar ?? null;
}
如需兼容未定义键并统一返回 null(而非 undefined),可使用空值合并操作符 ??;若需保留原始类型(如 false、0、'' 等 falsy 值),则应避免使用 ||,仅用 ?? 判断 undefined。
⚠️ 注意事项:
- 不要传入空数组
[]—— 虽然不会报错,但会返回空对象{},失去语义; - 键名必须精确匹配,大小写敏感;
- 若需读取全部数据(不推荐用于生产环境),可传入
null:await chrome.storage.local.get(null); - 在非
async函数中调用时,仍需用.then()处理 Promise,但批量模式依然适用。
总结:摒弃逐个 await readLocalStorage(key) 的冗余模式,拥抱 await chrome.storage.local.get(['key1', 'key2']) + 解构赋值,是 Manifest V3 下最实用、最符合现代 JavaScript 实践的存储读取方式。











