繁体   English   中英

我正在尝试使用Bluebird的方法Promisify并且它不起作用

[英]I'm trying to use the Bluebird's method Promisify and it's not working

我无法在蓝鸟上做一个简单的例子。 我已经使用了新的 Promise方法并且它可以工作,但是当我尝试使用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是如何运作的。

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

你可以在这里阅读它的工作原理。

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

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

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

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


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


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

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);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM