对于蓝鸟来说,最简单的方法是将其回调作为倒数第二个值来实现一个函数的最简单方法是什么?

时间:2015-07-31 17:46:15

标签: bluebird

我试图宣传这个geocoder库来连接外部api。自述文件说它的geocoder.geocode方法需要location, callback作为参数,但是on closer inspection,它实际上需要第三个参数 - 一个选项对象 - 所以它不能轻易地用蓝鸟和#39; s Promise.promisify()

什么是最快的&宣传这些类库方法的简单方法是什么?

以下作品,但有更简单的方法吗?

function geocoderAsync(string) {
  return new Promise(function (resolve, reject) {
    return geocoder.geocode(string, function (err, data) {
      if (err) {
        reject(err);
      } else {
        resolve(data);
      }
    });

1 个答案:

答案 0 :(得分:0)

如果它是图书馆中唯一奇怪的功能,我可能会做这样的事情。我认为Bluebird.fromCallback是您正在寻找的功能。

var Promise  = require('bluebird'),
    geocoder = Promise.promisifyAll(require('geocoder')); 

// If that is the only function with the odd callback order
// you could simply re-overwrite the `geocode` function.

geocoder.geocodeAsync = function (string, options) {
    return Promise.fromCallback(function (callback) {
        geocoder.geocode(string, callback, options);
    });
};