Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当调用方法时,它返回空数组_Javascript_Vue.js_Google Chrome Extension - Fatal编程技术网

Javascript 当调用方法时,它返回空数组

Javascript 当调用方法时,它返回空数组,javascript,vue.js,google-chrome-extension,Javascript,Vue.js,Google Chrome Extension,我正在使用VueJS开发一个Chrome扩展。我使用chrome.storage.sync存储了一些数据,我想在迭代之前检索它 这是我用来获取数据的方法的代码 getSpeedDials(){ 让speedDials=[] chrome.storage.sync.get('speedDials',函数(值){ if(value.hasOwnProperty('speedDials')){ console.log(value.speedDials) speedDials=value.speedDi

我正在使用VueJS开发一个Chrome扩展。我使用
chrome.storage.sync
存储了一些数据,我想在迭代之前检索它

这是我用来获取数据的方法的代码

getSpeedDials(){
让speedDials=[]
chrome.storage.sync.get('speedDials',函数(值){
if(value.hasOwnProperty('speedDials')){
console.log(value.speedDials)
speedDials=value.speedDials
} 
}); 
返回速度刻度盘
}

console.log(value.speedDials)
输出预期结果,一个包含多个对象的数组。但是返回的是一个空数组。如何调试此功能?

从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. 
  }); 
 })
}

chrome.storage.sync.get
是异步的。在从存储中加载值之前,返回初始空数组

您可以返回一个承诺,该承诺在完成时与结果一致

async getSpeedDials() {
    return new Promise(resolve => {
        chrome.storage.sync.get('speedDials', result => {
            resolve(result);
        });
    }
}
请注意,在执行此操作时,获取值的方式也应该有所不同

async
函数中,我们可以使用
wait
获取值:

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)

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

我不知道这个Chrome API,但我猜它是异步的。如果您在返回speedDials之前记录它,我猜您会在
get
中看到它在日志之前被记录