使用 idb 而不是 localStorage

Using idb instead of localStorage

我正在关注 Progressive Web App lab from Google,它说为了简单起见,它正在使用 localStorage,但我们应该将其更改为 idb。

基本上,我们想要存储一个城市列表来显示它们的天气信息。

我尝试按照信息 here 使用普通的 idb,但我认为我对此太陌生了,我无法获得任何信息。我应该这样做吗:

const dbPromise = idb.open('keyval-store', 1, upgradeDB => {
  upgradeDB.createObjectStore('keyval');
});

并且 keyval 会是我使用 keyval.get() 或 keyval.set() 获取和存储值的变量的名称吗?

我决定转向更简单的 idbKeyval,我在做:

app.saveSelectedCities = function() {
  var selectedCities = JSON.stringify(app.selectedCities);
  idbKeyval.set(selectedCities);
};

而不是 localStorage 示例:

app.saveSelectedCities = function() {
  var selectedCities = JSON.stringify(app.selectedCities);
  localStorage.selectedCities = selectedCities;
};

app.selectedCities = idbKeyval.keys().then(keys => console.log(keys)).catch(err => console.log('It failed!', err));

而不是 localStorage 示例:

app.selectedCities = localStorage.selectedCities;

但是我的应用没有加载任何数据,在开发者工具控制台中,我得到:

app.js:314 Uncaught ReferenceError: idbKeyval is not defined(…)

我确信我遗漏了一些微不足道的东西,但这些是我使用 javascript 之类的东西的第一步,所以请对此处涉及的任何要点提供任何帮助,我们将不胜感激!

鉴于您看到的错误,您似乎忘记了包含 idb-keyval 库。

我也正在经历这个,并希望它与 localForage 一起工作。花了一点时间,因为我也是新手,但这是我用于保存和加载功能的东西,它使它一切正常。

// TODO add saveSelectedCities function here
// Save list of cities to localStorage
app.saveSelectedCities = function() {
  var selectedCities = JSON.stringify(app.selectedCities);
  localforage.setItem('selectedCities', selectedCities);
  //localStorage.selectedCities = selectedCities;
}


localforage.getItem('selectedCities').then(function(cityList) {
  app.selectedCities = cityList;
  app.selectedCities.forEach(function(city) {
      app.getForecast(city.key, city.label);
  });
}).catch(function(err) {
    app.updateForecastCard(initialWeatherForecast);
    app.selectedCities = [
    {key: initialWeatherForecast.key, label: initialWeatherForecast.label}
    ];
    app.saveSelectedCities();
});