这段承诺功能的代码有什么问题?
What is wrong with this code that promisify a function?
这个函数不return一个承诺。
它使用 csvtojson 模块。
https://www.npmjs.com/package/csvtojson
var CSVConverter=require("csvtojson").Converter;
function get_json(cvs_file_location)
{
var data=fs.readFileSync(cvs_file_location).toString();
var csvConverter=new CSVConverter();
csvConverter.fromString(data,function(err,jsonObj){
if (err){
console.log("error msg: " + err);
return null;
}
var json_csv = clone_obj(jsonObj);
console.log(json_csv);
return json_csv;
});
}
我想将其转换成 return 的承诺。这是我写的;
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
代码有什么问题?还是有另一种方法可以将代码写入 return 承诺?
你必须承诺 Converter
的 prototype
因为它是一个构造函数。如果 Converter
对象直接具有要承诺的功能(大多数 API 就是这种情况),则常规 var Converter = Promise.promisifyAll(require('csvtojson').Converter));
会起作用。
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)
这个函数不return一个承诺。
它使用 csvtojson 模块。 https://www.npmjs.com/package/csvtojson
var CSVConverter=require("csvtojson").Converter;
function get_json(cvs_file_location)
{
var data=fs.readFileSync(cvs_file_location).toString();
var csvConverter=new CSVConverter();
csvConverter.fromString(data,function(err,jsonObj){
if (err){
console.log("error msg: " + err);
return null;
}
var json_csv = clone_obj(jsonObj);
console.log(json_csv);
return json_csv;
});
}
我想将其转换成 return 的承诺。这是我写的;
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
代码有什么问题?还是有另一种方法可以将代码写入 return 承诺?
你必须承诺 Converter
的 prototype
因为它是一个构造函数。如果 Converter
对象直接具有要承诺的功能(大多数 API 就是这种情况),则常规 var Converter = Promise.promisifyAll(require('csvtojson').Converter));
会起作用。
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)