Javascript 如何将参数传递给API请求2(我在react中从API响应1接收到)

Javascript 如何将参数传递给API请求2(我在react中从API响应1接收到),javascript,reactjs,async-await,axios,mobx,Javascript,Reactjs,Async Await,Axios,Mobx,我的两个API调用恰好同时进行,其中API1的响应将作为请求参数发送给API2。但是,该值是未定义的,因为直到那时它才被获取。有没有办法在react中解决此问题。Asyn/WAIT解决您的问题: const-requests=async()=>{ const response1=等待获取(“api1”) const result1=await response1.json() //现在您已经获得了api1的结果,您可以将其用于exmaple的api2主体 const response2=wai

我的两个API调用恰好同时进行,其中API1的响应将作为请求参数发送给API2。但是,该值是未定义的,因为直到那时它才被获取。有没有办法在react中解决此问题。

Asyn/WAIT解决您的问题:

const-requests=async()=>{
const response1=等待获取(“api1”)
const result1=await response1.json()
//现在您已经获得了api1的结果,您可以将其用于exmaple的api2主体
const response2=wait-fetch(“api2”,{method:“POST”,body:result1})
const result2=wait response1.json()

}
Asyn/await解决您的问题:

const-requests=async()=>{
const response1=等待获取(“api1”)
const result1=await response1.json()
//现在您已经获得了api1的结果,您可以将其用于exmaple的api2主体
const response2=wait-fetch(“api2”,{method:“POST”,body:result1})
const result2=wait response1.json()
}
或者如果使用axios

或者如果使用axios


有多种方法可以解决这个问题,我将解释一种最新也是最受欢迎的解决问题的方法

我相信您一定听说过JavaScript中的async/await,如果您没有听说过,我建议您围绕这个主题阅读一篇MDN文档

这里有两个关键字,async&&wait,让我们逐一查看它们

异步

在任何函数之前添加async意味着一件简单的事情,现在函数将返回一个承诺,而不是返回正常值

比如说,

async function fetchData() {
 return ('some data from fetch call')
}
如果只需通过fetchData()在控制台中运行上述函数。您会看到,这个函数不是返回字符串值,而是有趣地返回一个承诺

因此,简而言之,async确保函数返回承诺,并将非承诺封装在其中

等待

我确信现在,您已经猜到了为什么除了async之外还使用关键字await,原因很简单,因为关键字await使JavaScript等待,直到承诺(由async函数返回)解决并返回其结果

现在来看看如何使用它来解决您的问题,请遵循下面的代码片段

async function getUserData(){
 //make first request
 let response = await fetch('/api/user.json');
 let user     = await response.json();

 //using data from first request make second request/call
 let gitResponse = await fetch(`https://api.github.com/users/${user.name}`)
 let githubUser = await gitResponse.json()

 // show the avatar
  let img = document.createElement('img');
  img.src = githubUser.avatar_url;
  img.className = "promise-avatar-example";
  document.body.append(img);

 // wait 3 seconds
  await new Promise((resolve, reject) => setTimeout(resolve, 3000));

  img.remove();

  return githubUser;
}

正如您所看到的,上面的代码非常容易阅读和理解。有关JavaScript中async/await关键字的更多信息,请参阅文档

解决这个问题有多种方法,我将介绍最新也是最受欢迎的解决问题的方法之一

我相信您一定听说过JavaScript中的async/await,如果您没有听说过,我建议您围绕这个主题阅读一篇MDN文档

这里有两个关键字,async&&wait,让我们逐一查看它们

异步

在任何函数之前添加async意味着一件简单的事情,现在函数将返回一个承诺,而不是返回正常值

比如说,

async function fetchData() {
 return ('some data from fetch call')
}
如果只需通过fetchData()在控制台中运行上述函数。您会看到,这个函数不是返回字符串值,而是有趣地返回一个承诺

因此,简而言之,async确保函数返回承诺,并将非承诺封装在其中

等待

我确信现在,您已经猜到了为什么除了async之外还使用关键字await,原因很简单,因为关键字await使JavaScript等待,直到承诺(由async函数返回)解决并返回其结果

现在来看看如何使用它来解决您的问题,请遵循下面的代码片段

async function getUserData(){
 //make first request
 let response = await fetch('/api/user.json');
 let user     = await response.json();

 //using data from first request make second request/call
 let gitResponse = await fetch(`https://api.github.com/users/${user.name}`)
 let githubUser = await gitResponse.json()

 // show the avatar
  let img = document.createElement('img');
  img.src = githubUser.avatar_url;
  img.className = "promise-avatar-example";
  document.body.append(img);

 // wait 3 seconds
  await new Promise((resolve, reject) => setTimeout(resolve, 3000));

  img.remove();

  return githubUser;
}

正如您所看到的,上面的代码非常容易阅读和理解。有关JavaScript中async/await关键字的更多信息,请参阅文档

如果您使用的是react hooks,则可以使用Promise将API调用链接到
useffect

useffect(()=>{
fetchAPI1()。然后(fetchAPI2)
}, [])

如果您使用的是react hook,则可以使用Promise将API调用链接到
useffect

useffect(()=>{
fetchAPI1()。然后(fetchAPI2)
}, [])

有没有一种方法可以使用mobx的反应/等待?也许有一种方法可以使用mobx的反应/等待,尽管我不能在不知道这些函数将要做什么的情况下说太多。有没有一种方法可以使用mobx的反应/等待?有可能有一种方法可以使用mobx的反应/等待,虽然我不能说得太多,但我不知道您将如何处理这些函数。这种情况会导致不必要的错误,因为您没有检查第一个请求的结果状态。如果第一个请求发送了404响应或任何其他4XX或5XX响应,该怎么办。在将响应值用于不同的网络请求之前,我们应该始终检查响应状态。编辑并向上述解决方案添加了正确的方法。使用这种方法可能会导致不必要的错误,因为您没有检查第一个请求的结果状态。如果第一个请求发送了404响应或任何其他4XX或5XX响应,该怎么办。在将响应值用于不同的网络请求之前,我们应该始终检查响应状态。编辑并将正确的方法添加到上述解决方案中。