[英]Returning a value from distancematrix callback function undefined?
我假設是因為它是異步的。 這是我的代碼:
service.getDistanceMatrix(
{
origins: [yourPosition],
destinations: [end],
travelMode: 'WALKING',
}, callback);
function callback(response, status) {
if (status == 'OK') {
var origins = response.originAddresses;
for (var i = 0; i < origins.length; i++) {
var results = response.rows[i].elements;
for (var j = 0; j < results.length; j++) {
var element = results[j];
var distance = element.distance.value;
var duration = element.duration.value;
}
}
}
我想要做的是從回調中返回距離和持續時間值。 然后,返回該值,並將其提供給調用上述代碼的父 function 的 function。 我的蠻力想法是從回調內部返回,然后從回調 function 外部返回接收到的值,這樣我就可以實際使用該值。 為了清楚起見,據我所知,這是我的功能的圖表:
get_avg_speed
get_distance
callback
我知道回調是異步的,有正確的方法嗎?
Promise是您的朋友。 這是您使用 Promise 構造函數的代碼。 像這樣的二進制回調很麻煩,所以我將response
和status
放在 object 中。
const promisifiedGetDistanceMatrix = params => new Promise(resolve => {
service.getDistanceMatrix(params, (response, status) => {
resolve({ response, status })
})
})
const getElementsDistanceDuration = ({ response, status }) => {
if (status !== 'OK') return []
let elements = []
let origins = response.originAddresses;
for (let i = 0; i < origins.length; i++) {
let results = response.rows[i].elements;
for (let j = 0; j < results.length; j++) {
let element = results[j];
let distance = element.distance.value;
let duration = element.duration.value;
elements.push({ distance, duration })
}
}
return elements
}
然后你可以像這樣使用這些 promise 返回函數
const get_avg_speed = async (...args) => {
/* ... */
const elementsDistanceDuration = await promisifiedGetDistanceMatrix({
origins: [yourPosition],
destinations: [end],
travelMode: 'WALKING',
}).then(getElementsDistanceDuration)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.