2015-11-07 86 views
-1

这是What is wrong with this code that promisify a function?的后续问题为什么第一种方法是promisifying工作而不是第二种?

方法1工作;

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

方法2不起作用;

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

为什么方法1工作而不是方法2?

+0

'var Converter = require('csvtojson')。Converter; var converter = new Converter(); Promise.promisifyAll(Converter.prototype);'也可能会工作,promisifyAll正在向Converter对象添加新的方法,这些方法以异步结束http://bluebirdjs.com/docs/api/promise.promisifyall.html(if你正在使用蓝鸟) – caub

+0

你的意思是你需要做:'var converter = new Promise.promisifyAll(Converter.prototype);'? – caub

+0

@crl,刚刚测试过。不,那不行。 – user781486

回答

1
Promise.promisifyAll(obj) 

回报obj,因此...

Promise.promisifyAll(Converter.prototype) 

...返回Converter.prototype,不能因此Converter ...

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

...将分配给Converter.prototypeconverter

为了promisify原型和分配的Converter一个实例,你应该(现实)写两条语句(即方法1):

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

可以写一行...

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

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

+0

你的回答更好。我选择它作为答案。 – user781486

0

重新审查文件https://www.npmjs.com/package/csvtojson,Convertor是一个构造函数。它必须与前面的new一起使用。

+1

是的,这不是问题的答案。 –

+0

@ Roamer-1888,你是对的。我改变了我自己的问题。现在应该是正确的。 – user781486

相关问题