为什么第一种承诺方法有效而不是第二种方法?

Why does the first method of promisifying work and not the second one?

这是

的后续问题

方法 1 有效;

var Converter = require('csvtojson').Converter;
Promise.promisifyAll(Converter.prototype);
var converter = new Converter();

方法二不行;

var Converter = require('csvtojson').Converter;
var converter = Promise.promisifyAll(Converter.prototype);

为什么方法 1 有效而方法 2 无效?

重新检查文档https://www.npmjs.com/package/csvtojsonConvertor是一个构造函数。它必须与前面的 new 一起使用。

Promise.promisifyAll(obj)

returns obj, 因此...

Promise.promisifyAll(Converter.prototype)

... returns Converter.prototype,而不是 Converter 因此 ...

var converter = Promise.promisifyAll(Converter.prototype);

... 会将 Converter.prototype 分配给 converter.

为了 promisify 原型并分配 Converter 的实例,你应该(实际地)写两个语句(即方法 1):

Promise.promisifyAll(Converter.prototype);
var converter = new Converter();

可以写单行...

var converter = new (Promise.promisifyAll(Converter.prototype).constructor);

...虽然它的可读性较差。