我是Node JS的新手,正努力使自己熟悉函数式编程。 我在名为findinfo.js的文件中包含以下代码,并且试图将结果传递到主server.js:
const fs = require('fs');
const values = ["yes", "no", "?", "unknown", "partial"];
var cInfo = [];
function getFile (cb) {
fs.readFile('./scripts/blahblah.json', 'utf-8', function (err, jfile) {
if (err) {
throw new Error (err);
}
console.log("Function is executing...")
JSON.parse(jfile);
console.log('Parsing file done');
cb(jfile);
});
}
然后我正试图从server.js调用此函数,
var findinfo = require('./findinfo');
console.log(getFile());
如预期那样会使程序崩溃。
那我应该做些什么改变才能使它起作用?
答案 0 :(得分:0)
您需要导出getFile
,以便可以使用require
进行导入。
const fs = require('fs');
const values = ["yes", "no", "?", "unknown", "partial"];
var cInfo = [];
function getFile (cb) {
fs.readFile('./scripts/blahblah.json', 'utf-8', function (err, jfile) {
if (err) {
// throw new Error (err); // don't throw inside async callback
return cb(err);
}
console.log("Function is executing...")
JSON.parse(jfile);
console.log('Parsing file done');
cb(null, jfile);
});
}
module.exports = getFile;
server.js
var getFile = require('./findinfo');
getFile(function(err, file) {
console.log(err, file);
});
由于getFile
是一个异步函数,因此您必须等到调用cb
结束后才能console.log
的结果。
不建议在异步回调中使用throw
,因为它会使服务器崩溃,因此建议将错误传递给回调。
您应该看一下这个问题,以便进一步了解如何处理异步代码。