gpt4 book ai didi

javascript - 如何在不重复自己的情况下编写这段代码?

转载 作者:行者123 更新时间:2023-12-02 23:47:59 25 4
gpt4 key购买 nike

现在脑子里有一个巨大的放屁......

我正在编写一个小型股票价格跟踪器,我不是发出多个 API 请求,而是将数据保存到带有时间戳的 localStorage 中。如果我搜索相同的库存,它会在我的 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 )
})
}
})
}

有了这个,我将不得不重写获取,这似乎不是一个好主意。

最佳答案

你可以尝试这样的事情。

(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 中。

关于javascript - 如何在不重复自己的情况下编写这段代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55769964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com