Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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_Bluebird - Fatal编程技术网

Javascript 这个提示函数的代码有什么问题?

Javascript 这个提示函数的代码有什么问题?,javascript,node.js,bluebird,Javascript,Node.js,Bluebird,此函数不返回承诺 它使用csvtojson模块。 我想把它转换成一个承诺。这就是我写的 var Promise = require('bluebird'); var Converter = Promise.promisifyAll(require("csvtojson").Converter); function get_json(cvs_file_location) { var data=fs.readFileSync(cvs_file_location).toString();

此函数不返回承诺

它使用csvtojson模块。

我想把它转换成一个承诺。这就是我写的

var Promise = require('bluebird');
var Converter = Promise.promisifyAll(require("csvtojson").Converter);

function get_json(cvs_file_location)
{
    var data=fs.readFileSync(cvs_file_location).toString();

    return new Converter().fromStringAsync(data)
        .then(function(csvString){
            var json_csv = clone_obj(csvString);
            console.log(json_csv);
            return json_csv;
        })
        .catch(function(cb) {
            console.log("error msg: " + cb);
            return null;
        });
}
不幸的是,它不起作用。错误消息如下所示


代码有什么问题?或者是否有其他方法编写代码以返回承诺?

您必须承诺
转换器的
原型
,因为它是一个构造函数。常规
var转换器=promisifyAll(require('csvtojson').Converter))转换器
对象直接具有要实现的功能,则code>将起作用(与大多数API一样)


如果将
new Converter()
用括号括起来:
(new Converter()).fromStringAsync
?不幸的是,该模块中仍然不存在相同的错误
fromStringAsync
方法“我以为promisifyAll会将fromStringAsync方法添加到模块?”-
promisifyAll(require(“csvtojson”).Converter)
将只提示转换器的静态方法,而不是使用
新建转换器()创建的实例的方法;。尝试推广转换器的原型
var Converter=require(“csvtojson”)。转换器;promisifyAll(转换器、原型)。如果这不起作用,那么您将不得不在创建每个实例后对其进行promisify,这是非常昂贵的,除非有办法使用单个实例。另外,请记住
.promisifyAll()
是选择性的。它嗅出有前途的方法,而不去理会其他人。你确定
.fromString()
会兑现承诺吗?我爱你。我希望我能给你100票!代码现在起作用了。我问了一个后续问题。嗯,
Bluebird.promisifyAll
确实遵循
。prototype
自动链接,不是吗?@Bergi,显然不是。我也很惊讶。
var Promise = require('bluebird');
var Converter = Promise.promisifyAll(require("csvtojson").Converter);

function get_json(cvs_file_location)
{
    var data=fs.readFileSync(cvs_file_location).toString();

    return new Converter().fromStringAsync(data)
        .then(function(csvString){
            var json_csv = clone_obj(csvString);
            console.log(json_csv);
            return json_csv;
        })
        .catch(function(cb) {
            console.log("error msg: " + cb);
            return null;
        });
}
return new Converter().fromStringAsync(data)
                       ^ TypeError: (intermediate value).fromStringAsync is not a function
var fs = require('fs');
var Promise = require('bluebird');
var Converter = require('csvtojson').Converter;
Promise.promisifyAll(Converter.prototype);

var converter = new Converter();
converter.fromStringAsync(fs.readFileSync('foo.csv', 'utf8'))
  .then(console.log)