Javascript 这个提示函数的代码有什么问题?
此函数不返回承诺 它使用csvtojson模块。 我想把它转换成一个承诺。这就是我写的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();
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)