获取后在本地存储中保存 JSON
Save JSON in Local Storage after the fetch
对不起,如果这个帖子太多了,我看了好几篇文章,但找不到解决办法。所以,我正在从这个 API 中获取一个大的 JSON
,我想以某种方式在 localStorage
中缓存响应,所以下次加载页面时,脚本首先检查如果 JSON
中有一个具有请求 ID 的对象,如果有则呈现内容 - 如果没有,则转到 API 获取它。
我正在考虑设置两个 fetch() 函数,这就是我所拥有的:
fetch(url + id)
.then((response) => {
localStorage.setItem('myResponse', response);
})
.catch((error) => {
console.log(error);
})
然后,检查localStorage
里面有没有保存的东西,如果好的,用它来渲染HTML,如果没有,继续另一个fetch从API.
if(localStorage) {
createHTML(localStorage.myResponse);
} else {
fetch(url + id)
.then(response => response.json())
.then(data => createHTML(data))
}
但是,在第一次获取时,如果我使用 JSON.stringify(response)
,它只是将其显示为一个空对象,因此 localStorage
看起来像:myResponse - {}
。如果我在第一次获取时执行 console.log(response.json());
,它会显示 Promise {<pending>}
.
我试图从中得到一些东西,但没有结果......非常感谢任何帮助!
response.json()
是一个 Promise,它需要被 await
ed,或者链接成 .then()
;如果您只是按原样记录它,您将得到的只是 Promise {<pending>}
因为它还没有解析。
fetch(url + id)
.then( response => response.json() )
.then( json => {
localStorage.setItem('myResponse', JSON.stringify(json));
})
或使用 async/await 语法:
const response = await fetch(url + id);
const json = await response.json();
localStorage.setItem('myResponse', JSON.stringify(json));
对不起,如果这个帖子太多了,我看了好几篇文章,但找不到解决办法。所以,我正在从这个 API 中获取一个大的 JSON
,我想以某种方式在 localStorage
中缓存响应,所以下次加载页面时,脚本首先检查如果 JSON
中有一个具有请求 ID 的对象,如果有则呈现内容 - 如果没有,则转到 API 获取它。
我正在考虑设置两个 fetch() 函数,这就是我所拥有的:
fetch(url + id)
.then((response) => {
localStorage.setItem('myResponse', response);
})
.catch((error) => {
console.log(error);
})
然后,检查localStorage
里面有没有保存的东西,如果好的,用它来渲染HTML,如果没有,继续另一个fetch从API.
if(localStorage) {
createHTML(localStorage.myResponse);
} else {
fetch(url + id)
.then(response => response.json())
.then(data => createHTML(data))
}
但是,在第一次获取时,如果我使用 JSON.stringify(response)
,它只是将其显示为一个空对象,因此 localStorage
看起来像:myResponse - {}
。如果我在第一次获取时执行 console.log(response.json());
,它会显示 Promise {<pending>}
.
我试图从中得到一些东西,但没有结果......非常感谢任何帮助!
response.json()
是一个 Promise,它需要被 await
ed,或者链接成 .then()
;如果您只是按原样记录它,您将得到的只是 Promise {<pending>}
因为它还没有解析。
fetch(url + id)
.then( response => response.json() )
.then( json => {
localStorage.setItem('myResponse', JSON.stringify(json));
})
或使用 async/await 语法:
const response = await fetch(url + id);
const json = await response.json();
localStorage.setItem('myResponse', JSON.stringify(json));