我有一个函数来获取同一文件中的路由信息:-
sanGetDirections : function(origin,dest){
gm.directions({
origin: origin,
destination: dest
}, function(err, data) {
assert.ifError(err);
if (data.routes[0] && data.routes[0].legs) {
console.log(data.routes[0].legs[ 0 ].distance.text)
return data.routes[0].legs[ 0 ].distance.text;
}
})
}
我想循环调用这个函数:-
var distance = module.exports.sanGetDirections(veh_data[key].lat+','+veh_data[key].lng,lat+','+lng);
控制台打印每个调用的距离,但不返回值。 我如何同步实现这一点?
做出承诺。和使用async/await
.
sanGetDirections: function (origin, dest) {
return new Promise((res, rej) => {
gm.directions({
origin: origin,
destination: dest
}, function (err, data) {
if(err) rej(err);
if (data.routes[0] && data.routes[0].legs) {
console.log(data.routes[0].legs[0].distance.text)
res(data.routes[0].legs[0].distance.text)
}
rej('some error');
})
});
}
您也可以使用utils.promisify
来使函数成为承诺。现在您可以在async
函数中使用它。
const func = async () => {
for(let i=0;i<5;i++){
try{
const data = await module.exports.sanGetDirections(origin, dest);
}catch(err){
// do something with err
console.log(err);
}
}
}
参考这里: https://javascript.info/async-await#await