Reactjs 从回调函数返回的值
我在通过回调函数获取返回值时遇到了一些问题(“dist”=未定义)。不过,我可以从控制台得到它…请有人能帮忙Reactjs 从回调函数返回的值,reactjs,callback,frontend,google-distancematrix-api,distance-matrix,Reactjs,Callback,Frontend,Google Distancematrix Api,Distance Matrix,我在通过回调函数获取返回值时遇到了一些问题(“dist”=未定义)。不过,我可以从控制台得到它…请有人能帮忙 CalculateInstance=(地点,我)=>{ var origin=new window.google.maps.LatLng( parseFloat(地点、纬度) parseFloat(地点、经度) ); var destination=new window.google.maps.LatLng( parseFloat(我的纬度), parseFloat(我的经度) ); v
CalculateInstance=(地点,我)=>{
var origin=new window.google.maps.LatLng(
parseFloat(地点、纬度)
parseFloat(地点、经度)
);
var destination=new window.google.maps.LatLng(
parseFloat(我的纬度),
parseFloat(我的经度)
);
var service=new window.google.maps.DistanceMatrixService();
service.getDistanceMatrix(
{
来源:[来源],
目的地:[目的地],
travelMode:window.google.maps.travelMode.DRIVING,
避免:错误,
避免:错误,
unitSystem:window.google.maps.unitSystem.metric
},
功能(响应、状态){
如果(
状态==“正常”&&
响应。行[0]。元素[0]。状态!=“零结果”
) {
让dist=parseFloat(response.rows[0]。elements[0]。distance.text);
返回距离;
}否则{
警报(“错误:+status.toString());
}
}
);
};
您不能强制Google函数返回您的回调值,因此您最好从回调函数内部调用另一个函数
const setDist = (dist) => {
//persist your dist somehow, maybe setState?
this.setState({distance: dist});
}
service.getDistanceMatrix(
{
origins: [origin],
destinations: [destination],
travelMode: window.google.maps.TravelMode.DRIVING,
avoidHighways: false,
avoidTolls: false,
unitSystem: window.google.maps.UnitSystem.metric
},
function(response, status) {
if (
status === "OK" &&
response.rows[0].elements[0].status !== "ZERO_RESULTS"
) {
let dist = parseFloat(response.rows[0].elements[0].distance.text);
setDist(dist);
} else {
alert("Error: " + status.toString());
}
}
);
你不能强迫Google的函数返回你的回调值,所以你能做的最好的事情就是从你的回调函数中调用另一个函数
const setDist = (dist) => {
//persist your dist somehow, maybe setState?
this.setState({distance: dist});
}
service.getDistanceMatrix(
{
origins: [origin],
destinations: [destination],
travelMode: window.google.maps.TravelMode.DRIVING,
avoidHighways: false,
avoidTolls: false,
unitSystem: window.google.maps.UnitSystem.metric
},
function(response, status) {
if (
status === "OK" &&
response.rows[0].elements[0].status !== "ZERO_RESULTS"
) {
let dist = parseFloat(response.rows[0].elements[0].distance.text);
setDist(dist);
} else {
alert("Error: " + status.toString());
}
}
);
你试过用控制台记录整个对象吗?例如,在这一行之后添加
console.log('response:',response)..:
let dist=parseFloat(response.rows[0].elements[0].distance.text);`然后,您可以在控制台中展开响应对象,以确保该值存在于该对象中。您是否尝试在控制台中记录整个对象?例如,在这一行之后添加console.log('response:',response)..:
let dist=parseFloat(response.rows[0].elements[0].distance.text);`然后,您可以在控制台中展开响应对象,以确保该值存在于该对象中。嘿,伙计!!这不起作用…当我控制台记录this.state.distance时,我无法在回调函数中调用setDist函数==>它未定义。您可以控制台记录函数本身吗?在setDist(dist)
console\u log(setDist)
之后。我很好奇它是否有定义。另外,此calculatedInstance
位于何处?它在类组件中吗?还是你要进口?你好!!我在类组件中调用CalculateInstance,虽然我想返回setDist(dist)的值,但我不想向控制台显示函数值,因为我已经完成了。谢谢你,布莱恩,伙计!!这不起作用…当我控制台记录this.state.distance时,我无法在回调函数中调用setDist函数==>它未定义。您可以控制台记录函数本身吗?在setDist(dist)
console\u log(setDist)
之后。我很好奇它是否有定义。另外,此calculatedInstance
位于何处?它在类组件中吗?还是你要进口?你好!!我在类组件中调用CalculateInstance,虽然我想返回setDist(dist)的值,但我不想向控制台显示函数值,因为我已经完成了。谢谢,我是布莱恩