我具有在同一文件中获取路线信息的功能:-
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);
控制台打印每次呼叫的距离,但不返回值。我怎样才能做到这一点?
答案 0 :(得分:0)
兑现诺言。以及使用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);
}
}
}