来自 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 为:
- 待承诺函数的最后一个参数为回调函数
- 回调函数第一个参数为错误值
- 回调函数的第二个参数为结果值
查看 npm 上的 fb
包,我们可以看到回调使用以下形式:
function (res) { ...}
其中回调函数的第一个参数是结果,错误值似乎没有参数。这意味着这个 API 违反了规则 #2 和 #3。幸运的是,bluebird 允许用户编写自定义 promisifier 函数,详情请参阅 bluebird API。
我目前正在使用带有 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 为:
- 待承诺函数的最后一个参数为回调函数
- 回调函数第一个参数为错误值
- 回调函数的第二个参数为结果值
查看 npm 上的 fb
包,我们可以看到回调使用以下形式:
function (res) { ...}
其中回调函数的第一个参数是结果,错误值似乎没有参数。这意味着这个 API 违反了规则 #2 和 #3。幸运的是,bluebird 允许用户编写自定义 promisifier 函数,详情请参阅 bluebird API。