调用方法时返回空数组

时间:2019-04-12 08:39:35

标签: javascript vue.js google-chrome-extension

我正在使用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)输出预期结果,该数组包含多个对象。 但是返回的是一个空数组。

请帮助。 预先谢谢你。

2 个答案:

答案 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)

如果您有任何疑问,请告诉我

相关问题