Javascript 使用承诺返回回调函数的值

Javascript 使用承诺返回回调函数的值,javascript,jquery,angularjs,node.js,Javascript,Jquery,Angularjs,Node.js,如何使用承诺(使用承诺中的resolve方法)返回reverseGeocodeData的值 你必须解决或拒绝goecoder回调中的承诺 return new Promise(function(resolve, reject) { geocoder.reverseGeocode(33.7489, -84.3789, function (err, reverseGeocodeData) { if(err) return reject(err); reso

如何使用承诺(使用承诺中的resolve方法)返回
reverseGeocodeData
的值


你必须解决或拒绝goecoder回调中的承诺

return new Promise(function(resolve, reject) {
    geocoder.reverseGeocode(33.7489, -84.3789, function (err, reverseGeocodeData) {
         if(err) return reject(err);
         resolve(reverseGeocodeData);
    });
});

这将是承诺的基本实现。当然,根据您使用的promise库,还有其他选项。我更喜欢或

这是一个使用bluebird.js()的示例


@Quentin对于这个问题来说,这不是重复的,问题是如何提出一个接受回调的异步函数。让geocode=(lat,long)=>geocoder.reverse(lat,long,(err,data)=>newpromise((resolve,reject)=>if(err)return reject(err);resolve(data))@Quentin给出了一个使用promises的可能解决方案,还有很多其他的解决方案来解释如何返回一个值。但在我看来,这不是一个关于如何处理异步函数返回值的一般性问题,而是一个关于如何用承诺包装异步函数的具体问题。@robertklep-重复问题的答案仍然回答了这里的特定问题。@Quentin但问题不一样。为什么投反对票?答案没有错。在某些方面是否不令人满意?我做错了什么,为什么有人对我说-1
return new Promise(function(resolve, reject) {
    geocoder.reverseGeocode(33.7489, -84.3789, function (err, reverseGeocodeData) {
         if(err) return reject(err);
         resolve(reverseGeocodeData);
    });
});
var Promise = require('bluebird');
var reverseGeocodePromise = Promise.promisify(geocoder.reverseGeocode);

reverseGeocodePromise(33.7489, -84.3789)
  .then(function(result) {
    // do something;
  })
  .catch(function(err) {
    // handle error
  })