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

Javascript:在函数中混合异步和同步(缓存和Ajax请求),javascript,reactjs,axios,architectural-patterns,Javascript,Reactjs,Axios,Architectural Patterns,我正试图找出如何从一个函数中混合两种不同的返回(异步/同步),如下所示: getVideo(itemID){ let data = localStorage.getItem(itemID) if ( data ) { return data; } else{ axios.get('http://...') } } 正如您所看到的,我使用React来处理请求,我的目标是从缓存中获取数据,而不是在线获取数据。现在我有一个关于我的函数的特殊性,就是我使用了两个嵌套的

我正试图找出如何从一个函数中混合两种不同的返回(异步/同步),如下所示:

getVideo(itemID){
  let data = localStorage.getItem(itemID)

  if ( data ) {
    return data;
  } else{
    axios.get('http://...')
  }
}
正如您所看到的,我使用React来处理请求,我的目标是从缓存中获取数据,而不是在线获取数据。现在我有一个关于我的函数的特殊性,就是我使用了两个嵌套的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&很好。请参见下面的实现:

异步函数getVideo(itemID){ 让data=localStorage.getItem(itemID) 如果(数据){ 返回数据; }否则{ 等待axios。获取更多信息http://...,async r=>{//async回调用于处理另一个异步请求 log(`Axios响应:${r}`) //以同样的方式在这里执行另一个异步操作 }) } }
不要让通用函数最终处理不同的返回调用。您的函数应该始终返回承诺,即使它在缓存中同步找到值-使用
返回承诺。解析(数据)