NodeJs、Axios:变量的值未随 xhr 请求的响应更新

NodeJs, Axios: Value of variable not updating with response from xhr request

我正在使用 Axios 在 nodejs 中发出 xhr 请求。我正在尝试将此响应中的值保存到变量中,但它不起作用,我不确定为什么。

代码:

let redirectUrl = 'placeholder'
axios.get(url)
      .then(res => {
        redirectURL = res.url
        console.log(res.url, "HERE")
      })
      .catch(err => console.log(err))
      return res.render('index',{url: redirectURL})

我已经尝试在全局范围内将 redirectUrl 声明为 var 和本地范围,但该值没有改变,当我控制台记录该值时在索引上,它记录 placeholder.索引是 index.jsx 因为我使用 jsx 作为模板引擎。 如果我应该提供更多信息,请告诉我。 提前谢谢你。

axios.get 是异步调用,因此您的 return 将使用原始 (placeholder) 值而不是新值。通常为了解决这种异步性,我使用 async/await

async function getRedirectURL(url) {
  try {
    const res = await axios.get(url);
    // Note that if you want some return value from axios call you access it by res.data
    console.log('res.url :', res.url, ". res.data:", res.data);
    return res.render('index',{url: res.data.url});
  } catch (err) {
    console.log(err);
    throw err;
  }
}
      

Axios 是一个基于 promise 的 HTTP 客户端,所以当 javascript 引擎执行你的代码时,它将 axios 调用从调用栈(第 2 行)移动到 web API 然后它开始执行最后一行 return res.render('index',{url: redirectURL}) 其中 redirectURL 值为 placeholder。您必须在 promise then 方法中编写所有逻辑,例如

axios
  .get(url)
  .then((data) => res.render("index", { url: data.url }))
  .catch((err) => {
    // error response
    console.log(err);
  });