现在脑子里放屁...
我正在编写一个小小的股价跟踪器,而不是发出多个API请求,而是使用时间戳将数据保存到我的localStorage中。 如果我搜索相同的库存,则它将在我的localStorage中查找该物料。
如果本地存储中没有股票 ,则会向API发出提取请求。
如果库存存在,它将检查当前时间以及库存的保存时间戳。
如果库存时间戳超过,则会发出获取请求。
如果库存时间戳记没有超过限制,它将从localStorage抓取数据。
这是我到目前为止的代码:
let info = await retrieve_ticker_info( 'aapl' )
let retrieve_ticker_info = async ( ticker ) => {
return new Promise( resolve => {
let data = JSON.parse( localStorage.getItem( `${ticker}` ) )
if ( data ) {
// IF SAVED DATA IS NOT NULL
if ( data.expiration < Date.now() ) {
// IF SAVED DATA IS EXPIRED
fetch( api_url )
.then( res => res.json() )
.then( res => {
data = { ...res, expiration: Date.now() + TIME_TIL_REFRESH }
localStorage.setItem( `${ticker}`, JSON.stringify( data ) )
resolve( data )
})
} else {
// IF SAVED DATA IS NOT EXPIRED
resolve( data )
}
} else {
// IS DATA IS NULL
fetch( api_url )
.then( res => res.json() )
.then( res => {
data = { ...res, expiration: Date.now() + TIME_TIL_REFRESH }
localStorage.setItem( `${ticker}`, JSON.stringify( data ) )
resolve( data )
})
}
})
}
有了这个,我将不得不重写获取,这似乎不是一个好主意。
答案 0 :(得分:1)
您可以尝试这样的事情。
(async () => {
let info = await retrieve_ticker_info('aapl');
let fetch_data = async (api_url, ticker) => {
const res = await fetch(api_url);
const data = {
...res.json(),
expiration: Date.now() + TIME_TIL_REFRESH
};
localStorage.setItem(`${ticker}`, JSON.stringify(data));
return data;
};
let retrieve_ticker_info = async (ticker) => {
let data = JSON.parse(localStorage.getItem(`${ticker}`));
if (data) {
// IF SAVED DATA IS NOT NULL
if (data.expiration < Date.now()) {
data = await fetch_data(api_url, ticker);
}
} else {
// IS DATA IS NULL
data = await fetch_data(api_url, ticker);
}
return data;
};
})();
编辑:更新了代码以将其包装在async
IIFE中。