Javascript 为什么承诺的第一种方法有效而第二种方法无效?
这是我们的后续问题 方法1有效Javascript 为什么承诺的第一种方法有效而第二种方法无效?,javascript,node.js,new-operator,bluebird,Javascript,Node.js,New Operator,Bluebird,这是我们的后续问题 方法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.protot
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无效?在重新检查文档时,
转换器是一个构造函数。它必须与前面的new
一起使用
Promise.promisifyAll(obj)
返回对象
,因此
Promise.promisifyAll(Converter.prototype)
var converter = Promise.promisifyAll(Converter.prototype);
。。。返回Converter.prototype
,而不是Converter
,因此
Promise.promisifyAll(Converter.prototype)
var converter = Promise.promisifyAll(Converter.prototype);
。。。将Converter.prototype
分配给Converter
为了说明原型并分配转换器的实例,您应该(实际地)编写两条语句(即方法1):
你可以写一行
var converter = new (Promise.promisifyAll(Converter.prototype).constructor);
。。。尽管可读性较差。var Converter=require('csvtojson')。Converter;var转换器=新转换器();promisifyAll(转换器、原型)
可能也会起作用,promisifyAll正在向转换器对象添加新方法,这些方法以Async结尾(如果您使用的是bluebird),您的意思是您需要这样做:var Converter=new Promise.promisifyAll(Converter.prototype)代码>?(我的意思是,问题本身就可以回答,而不需要对文档进行任何必要的重新检查——问题中所示的代码是尽可能清晰的。如果第一个代码有效,那么很明显您必须使用new
,no?)尝试var converter=new(promisifyAll(require('csvtojson')。converter.prototype)。构造函数);代码>@Roamer-1888:Nah,这是一个可怕的单行程序,应该是3行(比如“方法1”)。另外,Bluebird应该能够提供完整的模块,因此惯用的方法应该是var converter=new(promisifyAll(require('csvtojson')).converter)代码>没错,但这不是问题的答案。@Roamer-1888,你说得对。我改变了我自己的问题。现在应该是正确的。你的答案更好。我选择了它作为答案。