我在chrome本地存储中有一个数组,格式为:
{"flights":
[
{"end":"2018-02-10","price":"476","start":"2018-02-01","tabId":1129367822},
{"end":"2018-02-11","price":"493","start":"2018-02-01","tabId":1129367825},
{"end":"2018-02-12","price":"468","start":"2018-02-01","tabId":1129367828}
]
}
现在,我以这种方式更新所有数据:
function updateValue(index, item) {
chrome.storage.local.get(['flights'], function (response) {
response.flights[index] = item;
chrome.storage.local.set({flights: response.flights});
});
}
但是异步请求存在问题,因为当时我有多个请求。一些请求会获取旧数据,然后再次将其保存在存储中...
我只想更新指定的元素(例如,使用新数据更新flight [0]),但是它不起作用... 像这样,但可行的:
chrome.storage.local.set({flights[0]: item});
有没有办法做到这一点?或者,也许您有一些建议以其他方式解决此问题。
非常感谢您的帮助
答案 0 :(得分:1)
您可以将每个排期保存到单独的密钥中,并通过遍历所有存储空间来获取所有排期:
cosnt flightPrefix = 'flight_';
function updateValue(index, item) {
chrome.storage.local.set({flightPrefix + index: item});
}
function getFlights() {
// Pass in null to get the entire contents of storage.
chrome.storage.sync.get(null, function(items) {
let flights = Object.keys(items).filter(key => key.beginsWith(flightPrefix));
console.log(flights);
});
}
答案 1 :(得分:1)
基于交易”的回答(该代码有一些错误)。 我是这样写的:
function parseFlight(result) {
let flightsArray = [];
Object.keys(result).forEach(function (key) {
if (key.includes('flight')) {
let index = key.replace('flight_', '');
flightsArray[index] = result[key];
}
});
return flightsArray;
}
function updateValue(index, item) {
let flightPrefix = 'flight_';
let obj = {};
obj[flightPrefix + index] = item;
chrome.storage.local.set(obj);
}
chrome.storage.local.get(null, function (result) {
let flights = parseFlight(result);
});
感谢帮助!