使用 promises 从 localStorage 异步检索时出错
Error when retrieving from localStorage async using promises
我在尝试从 localStorage 获取数据时遇到错误。
在下面附上了我的代码,并附上了我认为每一步应该发生的事情的评论。我还将 JSON 数据交换为样本数据集。
async function getData() {
var dataAll = localStorage.getItem('requestAll')
// check if data is in cache
if( dataAll === null ) {
// if it is not in cache then request it
var responseAll = await fetch('https://data.cityofchicago.org/resource/xzkq-xp2w.json')
// parse the json response
dataAll = await responseAll.json()
// store the data in the cache
localStorage.setItem('requestAll', JSON.stringify(dataAll));
} else {
// if it exists then parse it
dataAll = JSON.parse(dataAll)
}
// return the data
return dataAll
}
function waitForDomReady() {
return new Promise(resolve => $(resolve))
}
async function run() {
try {
var dataAll = await getData();
await waitForDomReady();
console.log(dataAll);
var jsonString = localStorage.getItem("requestAll");
var dataAll = JSON.parse(jsonString);
} catch (err) {
console.log('error occured')
}
}
run();
async function grabNewData() {
var dataAll = localStorage.getItem('requestAll')
// fetch new data from json source
var responseAll = await fetch('https://data.cityofchicago.org/resource/xzkq-xp2w.json')
// parse the json response
dataAll = await responseAll.json()
// store the new data in the cache ready for use
localStorage.setItem('request', JSON.stringify(dataAll));
console.log('New data stored');
// return the new data
return dataAll
}
setTimeout(function(){
grabNewData()
console.log('Checking for new records');
}, 10);
编辑:如下所示,我发现代码运行良好。来源太大了。
谢谢。
我对你重构的代码做了一个codesandbox。
代码如下所示:
注意:代码在 Whosebug 上不会 运行 正确,因为您正在发出请求并使用本地存储。
function getData() {
console.log("running");
// check fir requestAll in local storage. null if it doesn't exist.
const cache = localStorage.getItem("requestAll");
// if the data is in the cache, return it.
if (cache) return Promise.resolve(JSON.parse(cache));
// else get the data and store it.
return Promise.resolve(
fetch("https://data.cityofchicago.org/resource/xzkq-xp2w.json")
.then((res) => res.json())
.then((data) => {
localStorage.setItem("requestAll", JSON.stringify(data));
return data;
})
);
}
(() => {
getData().then(console.log);
})();
脚本运行良好。 JSON 数据源太大,无法存储在缓存中。
我在尝试从 localStorage 获取数据时遇到错误。
在下面附上了我的代码,并附上了我认为每一步应该发生的事情的评论。我还将 JSON 数据交换为样本数据集。
async function getData() {
var dataAll = localStorage.getItem('requestAll')
// check if data is in cache
if( dataAll === null ) {
// if it is not in cache then request it
var responseAll = await fetch('https://data.cityofchicago.org/resource/xzkq-xp2w.json')
// parse the json response
dataAll = await responseAll.json()
// store the data in the cache
localStorage.setItem('requestAll', JSON.stringify(dataAll));
} else {
// if it exists then parse it
dataAll = JSON.parse(dataAll)
}
// return the data
return dataAll
}
function waitForDomReady() {
return new Promise(resolve => $(resolve))
}
async function run() {
try {
var dataAll = await getData();
await waitForDomReady();
console.log(dataAll);
var jsonString = localStorage.getItem("requestAll");
var dataAll = JSON.parse(jsonString);
} catch (err) {
console.log('error occured')
}
}
run();
async function grabNewData() {
var dataAll = localStorage.getItem('requestAll')
// fetch new data from json source
var responseAll = await fetch('https://data.cityofchicago.org/resource/xzkq-xp2w.json')
// parse the json response
dataAll = await responseAll.json()
// store the new data in the cache ready for use
localStorage.setItem('request', JSON.stringify(dataAll));
console.log('New data stored');
// return the new data
return dataAll
}
setTimeout(function(){
grabNewData()
console.log('Checking for new records');
}, 10);
编辑:如下所示,我发现代码运行良好。来源太大了。
谢谢。
我对你重构的代码做了一个codesandbox。
代码如下所示:
注意:代码在 Whosebug 上不会 运行 正确,因为您正在发出请求并使用本地存储。
function getData() {
console.log("running");
// check fir requestAll in local storage. null if it doesn't exist.
const cache = localStorage.getItem("requestAll");
// if the data is in the cache, return it.
if (cache) return Promise.resolve(JSON.parse(cache));
// else get the data and store it.
return Promise.resolve(
fetch("https://data.cityofchicago.org/resource/xzkq-xp2w.json")
.then((res) => res.json())
.then((data) => {
localStorage.setItem("requestAll", JSON.stringify(data));
return data;
})
);
}
(() => {
getData().then(console.log);
})();
脚本运行良好。 JSON 数据源太大,无法存储在缓存中。