chrome.storage.local.get возвращает пустой массив
Столкнулся с проблемой, и не могу решить ее самостоятельно(
Если вызвать функцию IncCounter() то счетчик Settings.Data.CountData[date] будет успешно увеличен.
Затем вызываем функцию save(), затем load(). Если верить переменной Settings.Data.someBool функции отрабатывают (Значения someBool сохраняются и загружаются как надо).
Но вот массив CountData в Load() прилетает пустой. Что не так с этим массивом?
let Settings = {
Data: {
someBool: false,
CountData: []
}}
function save(){
chrome.storage.local.set({ SettingsData: Settings.Data }, function () {
console.debug("Save()");
});
}
function load() {
chrome.storage.local.get(['SettingsData'], function (result) {
console.debug("Load()");
if (!result.SettingsData) {
console.debug("Init");
save();
return;
}
Settings.Data = result.SettingsData;
console.debug(Settings.Data);
});
}
function IncCounter() {
let today = new Date();
let date = "Date-" + today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate();
if (Settings.Data.CountData[date] === undefined) {
Settings.Data.CountData[date] = 0;
}
Settings.Data.CountData[date]++;
save();
}
UPD:
Спасибо участнику с ником vsemozhetbyt, я пытался обращаться к элементам массива как к свойствам объекта. Отсюда и все проблемы.
Ответы (1 шт):
Автор решения: Vadim
→ Ссылка
Рекомендую к прочтению\использованию:
- библиотека - промисы для chrome api
- стрелочные функции, шаблонные строки и многое другое, для того чтобы писать код чище и лучше
- верблюд, которого любят даже дети, а именно lowerCamelCase, #javascript не java
- сайт - учебник, имеет со 2 пункта штуки, и чек 11 пункты
+Немного рефактора/примера в студию:
const settings = {
data: {
someBool: false,
countData: [],
},
};
const set=async(akey, obj)=>{
try{
await chrome.storage.local.set({[akey]: obj});
return true;
}catch(e){
console.log(e);
return false;
}
};
const get=async(pmt)=>{
if(pmt === false)return false;
const tmp = await chrome.storage.local.get([pmt]);
return tmp[pmt] ? tmp[pmt] : false;
};
(async()=>{
let date = new Date();
date = `Date: ${date.getFullYear()} - ${(date.getMonth()+1+'').padStart(2, '0')} - ${(date.getDate()+'').padStart(2, '0')}`;
console.log(date);
let r = 'some';
r = await set('SettingsData', settings.data);
console.log('saved', (r !== false ? '+' : '-'));
if(!r)return false;
r = await get('SettingsData');
console.log('loaded:', r);
if(!r)return false;
// init();
})();