我怎么能promisify我写的一个简单的asynchronous函数?

build立

在为Node编写一些数字Javascript代码的时候,发生了这样的想法:“为什么不使这个asynchronous呢? 例如,

var mySquare = function(x, callback) { callback(null, x * x); } mySquare(3, function(err, res) { console.log(res); }); // prints 9 

除非有更复杂的计算,而且可能会引发错误。

我怎么promisify这个function,而不重写它使用承诺? 使用蓝鸟的promisify ,通过var promisedSquare = Promise.promisify(mySquare) ,返回一个错误堆栈:

 TypeError: undefined is not a function at l (/path/bluebird.min.js:30:15474) at Function.e.promisify (/path/bluebird.min.js:30:16031) at repl:1:30 ... 

它几乎看起来像蓝鸟试图评估mySquare 。 我没有像d3.json (包装XHR)promisifying库函数没有问题,所以我很困惑:我需要提供比任何比callback驱动的asynchronous函数更多的蓝鸟?

感谢所有的评论者:我将把你的阐述浓缩成一个答案来解决这个问题。

由于代码片段在浏览器中工作,并且在npm重新安装之后,在节点中,错误必定是我的一个节点configuration错误。

但是这个问题突出了对asynchronous操作vs续传风格的错误理解。 我现在明白,Javascript运行时只能隐藏磁盘或networking抓取的延迟,或者更一般地说,当它在等待自己以外的事情时。 如果运行时需要执行大量的计算,那么就只能这样做了:它将无法神奇地暂停一个数值计算的中间步骤来处理Web请求。