我尝试使用Bluebird的方法Promisify并且它不能正常工作

时间:2015-05-08 05:01:18

标签: javascript asynchronous promise bluebird

我无法让一个简单的例子适用于蓝鸟。我使用了 承诺方法,但是当我尝试使用Promisify方法时,我可能做错了。

exports.makeRequest = function(someText){
    return Promise.resolve(someText);
}

var makeRequestAsync = Promise.promisify(exports.makeRequest);

makeRequestAsync('Testing').then(function(data){
    console.log(data); // --> log never appears
});

我真的想了解promisify如何运作。

1 个答案:

答案 0 :(得分:6)

Bluebird的promisify()仅适用于将回调作为其最后一个参数的节点式函数,其中该回调采用两个参数,一个错误和数据。您的功能不符合此标准。

您可以阅读它的工作原理here

此外,没有必要宣传已经返回承诺的函数。你可以直接调用该函数并使用它返回的promise,因为它已经是一个promise函数。

exports.makeRequest = function(someText){
    return Promise.resolve(someText);
}

exports.makeRequest('Testing').then(function(data){
    console.log(data);
});

工作演示:http://jsfiddle.net/jfriend00/n01zyqc6/

当然,由于你的功能实际上并不是异步,所以根本没有任何理由甚至可以使用它。

这是一个实际上是异步的东西并使用正确的调用约定的例子:

exports.myFunc = function(data, callback) {
    // make the result async
    setTimeout(function() {
        // call the callback with the node style calling convention
        callback(0, data);
    }, 500);

};

var myFuncAsync = Promise.promisify(exports.myFunc);

myFuncAsync("Hello").then(function(result) {
    console.log(result);
});