javascript - 如何 promise 我编写的简单异步函数?

标签 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

除非计算复杂得多,并且可能会引发错误。

问题

如何在不重写它以使用 promises 的情况下 promisify 这个函数?使用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
...

看起来 bluebird 似乎试图评估 mySquare。我在 promise 像 d3.json(包装 XHR)这样的库函数时没有遇到任何问题,所以我很困惑:除了回调驱动的异步函数之外,我还需要为 bluebird 提供任何东西吗?

最佳答案

感谢所有发表评论的人:我会将您的阐述浓缩成一个答案来结束这个问题。

错误一定是我的 Node 配置错误,因为代码片段在浏览器中有效,并且在 npm 重新安装后,在 Node 中也有效。

但是这个问题突出了对异步操作与连续传递风格的理解存在缺陷。我现在明白 Javascript 运行时只能隐藏磁盘或网络获取的延迟,或者更一般地说,当它等待自身以外的东西时。如果运行时必须进行大量计算,这就是它所能做的:它无法神奇地暂停数值计算的中间步骤来服务,比如 Web 请求。

关于javascript - 如何 promise 我编写的简单异步函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30553164/

相关文章:

linux - 奇怪的错误 8 - Centos 6.4 上的幽灵博客

c# - 如何处理 TopShelf 中的异步 Start() 错误

objective-c - 等待 dispatch_semaphore 以等待许多异步任务完成的正确方法

python - 使 Python slack 机器人异步

javascript - 将 src 动态设置为 dataURI 时,Img.onload 未触发

javascript - javascript中的两个嵌套循环有什么区别?

javascript - 如何在用户进行选择时切换可见性

javascript - 在node.js中运行示例代码成功,但在浏览器中运行修改后的代码失败

node.js - SequelizeConnectionRefusedError : connect ECONNREFUSED 127. 0.0.1:4321

javascript - 输入类型月份的设定值