我正在使用VueJS开发chrome扩展程序。我使用chrome.storage.sync
存储了一些数据,我想在进行迭代之前检索它们。
这是我用来获取数据的方法的代码。
getSpeedDials() {
let speedDials = []
chrome.storage.sync.get('speedDials', function(value) {
if (value.hasOwnProperty('speedDials')) {
console.log(value.speedDials)
speedDials = value.speedDials
}
});
return speedDials
}
console.log(value.speedDials)
输出预期结果,该数组包含多个对象。
但是返回的是一个空数组。
请帮助。 预先谢谢你。
答案 0 :(得分:0)
从getSpeedDials函数返回一个承诺。
getSpeedDials() {
return new Promise((resolve,reject) => {
let speedDials = []
chrome.storage.sync.get('speedDials', function(value) {
if (value.hasOwnProperty('speedDials')) {
console.log(value.speedDials)
speedDials = value.speedDials;
return resolve(speedDials);
}
return resolve();
// you can reject promise if you want to treat this as an error.
});
})
}
答案 1 :(得分:0)
chrome.storage.sync.get
是异步的。您将从存储中加载值之前返回初始的空数组。
您可以返回一个承诺,该承诺将在完成后解决该问题。
async getSpeedDials() {
return new Promise(resolve => {
chrome.storage.sync.get('speedDials', result => {
resolve(result);
});
}
}
请注意,执行此操作时,获取值的方式也应不同。
在async
函数内,我们可以使用await
来获取值:
let speedDials = await getSpeedDials();
如果不是:
let speedDials = [];
getSpeedDials().then(dials => {
speedDials = dials
});
// Note that when doing this, everything under this function will be executed before speedDials has any entries.
// To prevent this, make your function async, and use the aforementioned method (await)
如果您有任何疑问,请告诉我