来自 Bluebird 承诺库的结果作为错误返回

Results from Bluebird promisified library is returned as an error

我目前正在使用带有 fb npm 包的 Bluebird。

我已经设法将 fb 库获取到 return 数据。但是,数据被捕获为错误,而不是被传递给 then() 方法。

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

fb.apiAsync(endPoint, options)
  .then(function(response) {
    console.log(response); // This doesn't get called
  }, function(e) {
    console.log(e); // The facebook response gets returns as part of the error instead
  });

我是不是以错误的方式使用了 promises?到目前为止,我已经尝试按照 Bluebird 页面上的文档进行操作。

bluebird 中的 promisify 函数,默认情况下,期望回调 API 为:

  1. 待承诺函数的最后一个参数为回调函数
  2. 回调函数第一个参数为错误值
  3. 回调函数的第二个参数为结果值

查看 npm 上的 fb 包,我们可以看到回调使用以下形式:

function (res) { ...}

其中回调函数的第一个参数是结果,错误值似乎没有参数。这意味着这个 API 违反了规则 #2 和 #3。幸运的是,bluebird 允许用户编写自定义 promisifier 函数,详情请参阅 bluebird API