写了一个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
请问为什么?
你看文档的话会发现一个词叫做
nodeFunction
,需要promisify的方法必须要满足nodeFunction
的定义,其中一条就是回调函数作为最后一个参数,也就是说这个函数一定有作为回调函数的参数并且这个参数位于所有参数的最后。在你的例子中,run函数是没有回调参数的,所以也就无法判断这个promise是什么时候完成的,所以then里面的代码就不会执行,修改后的代码如下: