用promisifyAll 无法运行then里面的function
写了一个demo:
class Box{
constructor(name){
this.name = name;
}
run(){
console.log(this.name + ' is running')
}
}
var bluebird = require('bluebird');
var box = bluebird.promisifyAll(new Box('ss'));
box.runAsync().then(function(){
console.log('stop');
})
按理说应该要打印出
ss is running
stop
但是只能打印出
ss is running
请问为什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你看文档的话会发现一个词叫做
nodeFunction
,需要promisify的方法必须要满足nodeFunction
的定义,其中一条就是回调函数作为最后一个参数,也就是说这个函数一定有作为回调函数的参数并且这个参数位于所有参数的最后。在你的例子中,run函数是没有回调参数的,所以也就无法判断这个promise是什么时候完成的,所以then里面的代码就不会执行,修改后的代码如下:
.. 不太清楚你想干什么
没用过
bluebird
, 大概看了下大多用在nodejs
里面把callback
转变为promise
化。你这里box
的run
方法连形参都没有转成promise
又有什么意义呢。你发现了最后then
不执行,那你有没有想过then
应该什么时候去执行呢。就算你是为了简单的实验一下run
方法也应该写成你熟悉的异步模块的函数,至少有一个回掉函数吧其实你可以自己尝试一下这个库要怎么把
callback
的函数转变为promise
对象,自己简单来写可以会这样可以看到如果你最后一个回掉函数都没有,生产的
promise
就跟本没有触发错误或者成功的时机根据上面的提示,终于弄懂了。
promisifyAll会把对象里面所有的函数包括原型都包裹成一个promise
重写了一下:
结果