我尝试使用以下内容执行get请求:
router.get('/marketUpdates',((request, response) => {
console.log("market updates");
var data: Order[]
axios.get('http://localhost:8082/marketUpdates')
.then(function (response) {
console.log("GET Response")
console.log(response.data);
data = response.data;
})
.catch(function (error) {
console.log("Error in fetching market updates");
});
console.log("Data before sending is ")
console.log(data);
response.send(data);
}))
但是,我在底部附近的console.log在.then。
中的console.log之前执行数据在发送时未定义。有谁知道我怎么能避免这个?
答案 0 :(得分:3)
then
中的数据与您发送的data
不一样......您正在使用function(response)
而不是箭头功能。 (response) => {}
所以你要绑定另一个。 以这种方式尝试:
router.get('/marketUpdates',((request, response) => {
console.log("market updates");
let data: Order[]
console.log("Data before sending is ")
console.log(data);
axios.get('http://localhost:8082/marketUpdates')
.then((getResponse) => {
console.log("GET Response")
console.log(getResponse.data);
data = getResponse.data;
response.send(data);
})
.catch(function (error) {
console.log("Error while fetching market updates");
});
}))
答案 1 :(得分:3)
发送到服务器的请求始终是异步的。这意味着,当服务器响应时,将执行函数.then()
。
让我重新格式化您的代码:
router.get('/marketUpdates',((request, response) => {
console.log("market updates");
var data: Order[];
console.log("Data before sending is ")
console.log(data);
axios.get('http://localhost:8082/marketUpdates')
.then((response) => {
console.log("GET Response")
console.log(response.data);
data = response.data;
response.send(data);
})
.catch(function (error) {
console.log("Error in fetching market updates");
});
}))
使用行axios.get('http://localhost:8082/marketUpdates')
,您将向服务器发出请求,该服务器将响应,但这需要时间。当程序等待服务器响应时,JavaScript不会阻止它执行该函数以保持用户界面运行。
所以.get
返回一个Promise,它包含几个在不同场景中调用的函数。一旦服务器返回200和响应,就会调用作为.then
的第一个参数给出的函数。
这意味着只要axios触发对服务器的调用,就会执行代码底部的日志。此时没有数据,因为服务器尚未响应。