2

我试图弄清楚如何从一个看起来像这样的函数混合 2 个不同的返回(异步/同步):

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 调用放入一个函数中,但不确定如何做到这一点并同时处理不同的返回调用。

任何人的想法?

4

2 回答 2

1

是的,您可以使用嵌套函数来做到这一点。将您的主要功能转换为异步,您就可以开始了。请参阅下面的实现:

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
    })
  }
}
于 2020-04-08T17:09:49.990 回答
1

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

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

    if ( data ) {
        return data;
    } else {
        return await axios.get('http://...')
    }
}
于 2020-04-08T16:50:32.793 回答