gpt4 book ai didi

javascript - 等待异步 Javascript 函数结束以检索结果(延迟?)

转载 作者:行者123 更新时间:2023-12-01 02:21:05 25 4
gpt4 key购买 nike

好的,大家,我知道这个话题已经被讨论过多次,但我找不到解决我的问题的答案。

所以我尝试做一个简单的思考:我正在创建一个字符串,例如:距离是:“+CalculateDistance(position);想要的结果类似于distance is 5kms (8min)

CalculateDistance(position) 是一个调用名为 DistanceMatrix 的 Google map API 的函数来计算两点之间的距离。该 API 已记录为 here ,并且给定的示例完美运行。我这样改编:

function CalculateDistance(position)
{
var service = new google.maps.DistanceMatrixService();
var destination = new google.maps.LatLng(/* some lat/lng */);

service.getDistanceMatrix(
{
origins: [position],
destinations: [destination],
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: false,
avoidTolls: false
}, callback);
}

function callback(response, status) {
if (status == google.maps.DistanceMatrixStatus.OK)
{
var origins = response.originAddresses;
var destinations = response.destinationAddresses;

var results = response.rows[0].elements;
distanceMatrixResult = results[0].distance.text + " ( " + results[0].duration.text + " min)";
}

哦,顺便说一句,distanceMatrixResult 是一个全局变量。事实上,我只需要获取results[0].distance.text的内容(当我在callback()中的控制台中打印它时,该值就可以了),然后连接该值与“距离是”。如果有人有更聪明的解决方案,欢迎!

API 调用是异步,在我的例子中,distanceMatrixResult 在结果字符串中始终为空。但是,当我在控制台中记录其值时,distanceMatrixResult 值在创建之后就变成了好的值。

我想写的是:

• 调用CalculateDistance(异步调用回调)
• 当callback 结束时,将字符串与distanceMatrixResult 值连接起来。

我尝试了一些Deferred ,就像 $.done()$.when().then() 但我无法成功...

有人可以帮助我吗?
谢谢!

最佳答案

distanceMatrixResult is a global variable

不应该,它应该是你的 Promise (Deferred) 所代表的值。这是基本设置:

function calculateDistance(position) {
var service = new google.maps.DistanceMatrixService();
var destination = new google.maps.LatLng(/* some lat/lng */);
var dfd = $.Deferred();
service.getDistanceMatrix({
origins: [position],
destinations: [destination],
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: false,
avoidTolls: false
}, function(response, status) {
if (status == google.maps.DistanceMatrixStatus.OK)
dfd.resolve(response);
else
dfd.reject(status);
});
return dfd.promise();
}

现在,你想做

calculateDistance(…).then(function(response) {
var origins = response.originAddresses;
var destinations = response.destinationAddresses;
var results = response.rows[0].elements;
return results[0].distance.text + " ( " + results[0].duration.text + " min)";
}).done(function(distanceMatrixResult) {
var myString = "distance is: "+distanceMatrixResult;
// do something with your string now
});

关于javascript - 等待异步 Javascript 函数结束以检索结果(延迟?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19125716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com