我是asynch编程的新手,我无法理解Promises。我正在尝试使用反向地理编码库,其中lat / long被发送到Google Maps并返回详细说明该位置的json。
class Geolocator
{
constructor()
{
let options = {
provider: 'google',
httpAdapter: 'https',
apiKey: mapsKey,
formatter: null
};
this._geocoder = NodeGeocoder(options);
}
getLocationId(lat, lon)
{
this._geocoder.reverse({lat: lat, lon: lon})
.then(function(res) {
return this._parse(null, res);
})
.catch(function(err) {
return this._parse(err, null);
});
}
_parse(err, res)
{
if (err || !res)
throw new Error(err);
return res;
}
当我致电geolocator.getLocationId
时,我得到undefined
。我猜测方法调用退出并返回undefined
。封装承诺的最佳方法是什么?
答案 0 :(得分:1)
就像@smarx所说,你会在Promise
返回getLocationId()
并执行then
分支:
class Geolocator {
// ...
/* returns a promise with 1 argument */
getLocationId(lat, lon) {
return this._geocoder.reverse({ lat, lon })
}
}
// calling from outside
geolocator
.getLocationId(lat, lon)
.then((res) => {
// whatever
})
.catch((err) => {
// error
})