我怎样才能宣传我写的一个简单的异步函数?

时间:2015-05-31 02:12:47

标签: javascript node.js asynchronous promise

设置

在为Node编写一些数字Javascript代码时,想到了“为什么不让这个异步?”如,

var mySquare = function(x, callback) {
    callback(null, x * x);
}

mySquare(3, function(err, res) { console.log(res); });
// prints 9

除了计算更复杂,并且可能引发错误。

问题

如何在不重写使用承诺的情况下宣传此功能?使用bluebird's 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)这样的库函数,所以我很困惑:除了回调驱动的异步函数之外,我还需要提供蓝鸟吗?

1 个答案:

答案 0 :(得分:1)

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

错误一定是我自己的节点配置错误,因为代码片段在浏览器中工作,并且在npm重新安装之后也在节点中工作。

但问题突出了异步操作与延续传递风格的错误理解。我现在明白,Javascript运行时只能隐藏磁盘或网络提取的延迟,或者更常见的是,当它等待自身以外的其他东西时。如果运行时必须进行大量计算,那么它就可以做到:它无法神奇地暂停数字计算的中间步骤来服务,比如网络请求。