Как я могу выполнить другой запрос после первого запроса со статусом сбоя

#javascript #api #asynchronous #xmlhttprequest

#javascript #API #асинхронный #xmlhttprequest

Вопрос:

Я пытаюсь извлечь какой-то объект, но проблема в том, что сначала мне нужно проверить, есть ли какой-либо объект на конечной точке кэша, если нет, я должен выполнить обычную выборку из обычной конечной точки.

До сих пор мне удавалось выполнять выборку только из:

  1. Нормальная конечная точка и установить все в состояние,
  2. Кэшируйте конечную точку и установите все в состояние

Любые попытки смешать оба метода заканчивались неудачей: (

Как я могу смешать эти два метода?

 const getCache = async () => {
  try {
    const apiCall = await fetch(fetchCacheEndpoint)
    const data = await apiCall.json()
    return data
  } catch (e) {
    console.log(e);
  }

}
const pageOne = getCache().then((result) => {
  const convertedOBj = result.doSomeSeriousStuff()
  this.setState({
     desiredObj: convertedOBj 
  })
})
  

Я ожидал сделать что-то вроде этого

 const getCache = async () => {
  try {
    const apiCall = await fetch(fetchCacheEndpoint)
    const data = await apiCall.json()
    return data
  } catch (e) {
    console.log(e);
  }
}
let convertedOBj 
const pageOne = getCache().then((result) => {
 if ((result === undefined) || (!result) || (result amp;amp; !result.length > 0)) {
    const makeRegularFetch = async () => {
      const regularFetch = await fetch(regularEndPoint)
      const data = await regularFetch.json()
    }
    const pageTwo = makeRegularFetch ().then((result) => {
      convertedOBj = result.doSomeSeriousStuff()
      this.setState({
        desiredObj: convertedOBj 
      })
    })
 } else {
   convertedOBj = result.doSomeSeriousStuff()
   this.setState({
     desiredObj: convertedOBj 
   })
 }

})

  

После сбоя первой выборки (getCache) выполняется другая выборка (makeRegularFetch) для второй конечной точки, что всегда нормально, но только в том случае, когда first (getCache) возвращает пустой объект или просто какую-либо ошибку
Как я могу справиться с такого рода действиями?

Ответ №1:

Из того, что я вижу во второй части вашего кода, вы никогда не выполняете свою pageOne функцию.

Попробуйте pageOne() после вашего определения.

Однако я сделал скрипку на stackblitz для вашего случая: https://stackblitz.com/edit/js-eufm8h

Если вы чего-то не понимаете, не стесняйтесь спрашивать.