Bluebird promisified库的结果将作为错误返回

时间:2015-08-18 16:47:51

标签: javascript node.js facebook-javascript-sdk bluebird

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

我设法让fb库返回数据。但是,数据被捕获为错误,而不是传递给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
  });

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

1 个答案:

答案 0 :(得分:3)

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

  1. 要实现的函数的最后一个参数是回调函数
  2. 回调函数的第一个参数是错误值
  3. 回调函数的第二个参数是结果值
  4. 查看npm上的fb包,我们可以看到回调使用以下形式:

    function (res) { ...}

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