我正在尝试使用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”。
谢谢。
亲切的问候
答案 0 :(得分:1)
请注意,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);
});
});
答案 1 :(得分:0)
也许尝试异步/等待方法:
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);
}
答案 2 :(得分:0)
您为什么不在首次通话的then
子句中进行下次通话?这些axios调用是异步的,这意味着您的第一次调用的then
子句将在其下面编写的代码之后执行。
请参阅本文以了解异步调用的工作方式:https://medium.com/codebuddies/getting-to-know-asynchronous-javascript-callbacks-promises-and-async-await-17e0673281ee