nodejs,axios:变量的值不随xhr请求的响应更新

vd8tlhqk  于 2021-10-10  发布在  Java
关注(0)|答案(2)|浏览(221)

我正在nodejs中使用axios发出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是index.jsx,因为我使用jsx作为模板引擎。如果我需要提供更多信息,请告诉我。先谢谢你。

omqzjyyz

omqzjyyz1#

axios.get 是一个异步调用,因此您的返回将使用原始( 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;
}
}

jgovgodb

jgovgodb2#

axios是一个基于promise的http客户端,因此当javascript引擎执行代码时,它将axios调用从callstack(第2行)移动到web api,然后开始执行最后一行返回 res.render('index',{url: redirectURL}) 其中,重定向URL值是占位符。你必须在promise-then方法中写下所有的逻辑,比如

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

相关问题