Javascript-在新请求中使用先前请求中的数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript-在新请求中使用先前请求中的数据相关的知识,希望对你有一定的参考价值。
我正在尝试使用Dialogflow的InLine编辑器中的Axios执行一些API调用,但无法使其正常工作,您能为我提供帮助吗?
function calc(agent) {
axios.get('https://maps.googleapis.com/maps/api/geocode/json?address=xxx')
.then((result) => {
const Lat2 = result.data.results[0].geometry.location.lat;
const Lng2 = result.data.results[0].geometry.location.lng;
});
const data = {
"addresses": [
{
"lat": Lat2,
"lon": Lng2,
}
]
};
return axios.post('https://api.test.XXXX', data, {
headers: {
'Content-Type': 'application/json',
'Authorization': 'YYYYYY'
}})
.then((result) => {
const cant = result.data.total.amount;
agent.add('This is ' + cant);
});
}
关于数据常量,我无法为Lat2和Lng2变量分配“ lat”和“ lon”。
谢谢。
亲切的问候
答案
注意Lat2
和Lon2
的范围在传递给第一个.then()
的函数中。要访问它们,您需要从该函数返回它们,然后再链接另一个.then()
,或者您可以在同一函数内移动以后的处理。
承诺链接:
axios
.get('https://maps.googleapis.com/maps/api/geocode/json?address=xxx')
.then(result => {
const Lat2 = result.data.results[0].geometry.location.lat;
const Lng2 = result.data.results[0].geometry.location.lng;
return { Lat2, Lng2 };
})
.then(({ Lat2, Lng2 }) => {
const data = {
addresses: [
{
lat: Lat2,
lon: Lng2
}
]
};
return axios.post('https://api.test.XXXX', data, {
headers: {
'Content-Type': 'application/json',
Authorization: 'YYYYYY'
}
});
})
.then(result => {
const cant = result.data.total.amount;
agent.add('This is ' + cant);
});
稍后在同一函数中处理:
axios
.get('https://maps.googleapis.com/maps/api/geocode/json?address=xxx')
.then(result => {
const Lat2 = result.data.results[0].geometry.location.lat;
const Lng2 = result.data.results[0].geometry.location.lng;
const data = {
addresses: [
{
lat: Lat2,
lon: Lng2
}
]
};
return axios
.post('https://api.test.XXXX', data, {
headers: {
'Content-Type': 'application/json',
Authorization: 'YYYYYY'
}
})
.then(result => {
const cant = result.data.total.amount;
agent.add('This is ' + cant);
});
});
另一答案
也许尝试异步/等待方法:
async function calc(agent) {
const result = await axios.get('https://maps.googleapis.com/maps/api/geocode/json?address=xxx')
const Lat2 = result.data.results[0].geometry.location.lat;
const Lng2 = result.data.results[0].geometry.location.lng;
const data = {
"addresses": [
{
"lat": Lat2,
"lon": Lng2,
}
]
};
const result2 = await axios.post('https://api.test.XXXX', data, {
headers: {
'Content-Type': 'application/json',
'Authorization': 'YYYYYY'
}})
const cant = result2.data.total.amount;
agent.add('This is ' + cant);
}
另一答案
您为什么不在首次通话的then
子句中拨打下一个电话?这些axios调用是异步的,这意味着您的第一个调用的then
子句将在其下面编写的代码之后执行。请参阅本文以了解异步调用的工作方式:https://medium.com/codebuddies/getting-to-know-asynchronous-javascript-callbacks-promises-and-async-await-17e0673281ee
以上是关于Javascript-在新请求中使用先前请求中的数据的主要内容,如果未能解决你的问题,请参考以下文章