承诺与Bluebird合作
Promisifying a function with Bluebird
我是javascript异步概念的新手,来自C++背景。最近,我意识到我的一些功能不起作用,因为它们不返回承诺。
例如,此函数;
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;
});
}
如果我试图根据函数的返回值分配一个变量,我会得到未定义的结果。
var alerts_obj = get_json(testData);
如何修改get_json()
以返回承诺?我想用蓝鸟。我正在阅读承诺,但对于一个初学者来说,这是一个相当难以承受的时刻。
如果您使用的是bluebird,您可以简单地将Promisification与promisifyAll()一起使用:
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().fromString(data)
.then(function(jsonObj){
var json_csv = clone_obj(jsonObj);
console.log(json_csv);
return json_csv;
})
.catch(function(err) {
console.log("error msg: " + err);
return null;
});
}
编辑您的第二条评论:
你可以这样做来获得价值:
get_json(cvs_file_location).then(function(val) { console.log(val) }
但是您不能将它直接分配给变量,因为它是异步的。请参阅以下问答以获得更多见解:如何从异步回调函数返回值?
相关文章:
- 承诺在非节点式回调上使用Bluebird
- 剑道UI不与流星合作
- bluebird promise的while()循环正确(无递归?)
- 生成器在与bluebird和co的express中起作用
- 如何使用bluebird将原始数据与Promise.map的响应一起传递
- ReactJS不与Zurb Foundation Accorsions合作吗
- Bluebird中承诺链数组的串行执行
- Mongodb节点驱动程序2.0.*与Bluebird 2.9.*承诺
- 与杜兰达尔合作的第一个JavaScript项目.尝试从第三方 API 获取数据
- bluebird promise catch() 没有使用 Promise.CancelError 调用内部函数
- 使用 Promise 在另一个函数中调用带有 Bluebird 承诺库的函数
- Bluebird promisifyAll不会创建整个异步函数集
- Jquery没有'不要与合作!文本插件需要带主干的js
- 正在等待bluebird promise内部的可选流程操作
- 在循环中调用Bluebird Promise函数
- 如何使用Temasys AdapterJS与Microsoft Edge合作
- 返回Bluebird中被拒绝的承诺和onPossiblyUnhandledRejection处理程序
- JS bluebird承诺错误没有给出任何细节
- NodeJS - Bluebird:等待循环完成
- 承诺与Bluebird合作