javascript - 在第一个请求失败后,如何设法发出不同的请求

标签 javascript api asynchronous 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 && !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)到第二个端点,这总是没问题,但仅在第一个(getCache)返回空对象或任何类型的错误的情况下 我该如何处理这种行为?

最佳答案

从我在代码的第二部分中看到的,您从未执行 pageOne 函数。

在定义后尝试 pageOne()

但是我在 stackblitz 上为你的情况做了一个 fiddle :https://stackblitz.com/edit/js-eufm8h

如果有不明白的地方,请随时提问。

关于javascript - 在第一个请求失败后,如何设法发出不同的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55695737/

相关文章:

javascript - 在 $watch 中使用 $apply

javascript - RequireJS + Zepto + 航点 : Cannot read property 'apply' of undefined

ruby-on-rails - 关联类型不匹配 : How can I create an object and associated (nested) objects with RESTful API (Rails) accepting JSON?

Java:如何使用数据进行 API 调用?

javascript - asp.net web 服务 javascript 包装器异步问题

c++ - 与 std::future 关联的存储是如何分配的?

c# - 任务等待与 Task.WaitAll

javascript - 如何在 React Native 中进行实时抓取?

javascript - 允许在正则表达式中使用减号

mysql - 解析电子邮件数据的 API