при вызове метода возвращает пустой массив - PullRequest
0 голосов
/ 12 апреля 2019

Я разрабатываю расширение для Chrome, используя VueJS. Я храню некоторые данные, используя 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 голосов
/ 12 апреля 2019

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)

Дайте мне знать, если у вас есть какие-либо вопросы

0 голосов
/ 12 апреля 2019

возвращает обещание из функции 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. 
  }); 
 })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...