2015-11-07 109 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

相關問題