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);
});
我正在使用 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);
});