Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么承诺的第一种方法有效而第二种方法无效?_Javascript_Node.js_New Operator_Bluebird - Fatal编程技术网

Javascript 为什么承诺的第一种方法有效而第二种方法无效?

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

这是我们的后续问题

方法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无效?

在重新检查文档时,
转换器是一个构造函数。它必须与前面的
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,你说得对。我改变了我自己的问题。现在应该是正确的。你的答案更好。我选择了它作为答案。