我无法让一个简单的例子适用于蓝鸟。我使用了新 承诺方法,但是当我尝试使用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如何运作。
答案 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);
});