Javascript:在函数(缓存和Ajax请求)中混合异步和同步



我正试图弄清楚如何将两个不同的返回(异步/同步(从如下函数中混合:

getVideo(itemID){
let data = localStorage.getItem(itemID)
if ( data ) {
return data;
} else{
axios.get('http://...')
}
}

正如你所看到的,我正在使用React来处理我的请求,我的目标是从缓存中获取数据,而不是让它在线。现在我的函数有一个特殊性,那就是,我使用2个嵌套的axios.get('http://...’(。

所以我的设想是:

- GET item online
-- GET SubItem online
-- OR get SubItem from cache if exists
---- Get SubSubItem online
---- Or get SubSubItem from cache if exists 
------ Update State 

我希望能够将我的GET调用放入一个函数中,但不确定如何做到这一点并同时处理不同的返回调用。

有人知道吗?

没有办法混合同步和异步,但您总是可以将同步转换为异步而不会出现问题:

getVideo = async (itemID) => {
let data = localStorage.getItem(itemID)
if ( data ) {
return data;
} else {
return await axios.get('http://...')
}
}

是的,您可以使用嵌套函数来实现。将您的主函数转换为async&你可以走了。参见以下实现:

async function getVideo(itemID){
let data = localStorage.getItem(itemID)
if ( data ) {
return data;
} else{
await axios.get('http://...', async r => {// Async callback to use handle another async request
console.log(`Axios response: ${r}`)
// do another async stuff here in the same way
})
}
}

相关内容

  • 没有找到相关文章

最新更新