обновить только указанный элемент с помощью chrome.storage.local.set - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть массив в локальном хранилище 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});
    });
}

Но есть проблема с асинхронными запросами,потому что у меня есть несколько запросов в то время.Некоторые запросы получают старые данные и снова сохраняют их в хранилище ...

Я хочу обновить только указанный элемент (например, полеты [0] с новыми данными), но это не работает ... Что-то вродеэто, но выполнимо:

    chrome.storage.local.set({flights[0]: item});

Есть ли способ сделать это?Или, может быть, у вас есть несколько советов, как решить эту проблему другим способом.

большое спасибо за любую помощь

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

На основе ответа terales '(в этом коде есть ошибки).Я делаю это так:

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

Спасибо за помощь!

0 голосов
/ 12 ноября 2018

Вы можете сохранить каждый рейс в отдельный ключ и получить все рейсы, пройдя через все хранилище:

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