Javascript 在节点js中返回数据
我的申请表中有两个文件, DesignFactory.js:Javascript 在节点js中返回数据,javascript,node.js,factory,Javascript,Node.js,Factory,我的申请表中有两个文件, DesignFactory.js: var fs = require('fs'); var dotenv = require('dotenv'); dotenv.load(); var designtokenfile = require ('./designtokenfile'); var designtokendb = require ('./designtokendb'); var TYPE=process.env.TYPE; var DesignFactory={
var fs = require('fs');
var dotenv = require('dotenv');
dotenv.load();
var designtokenfile = require ('./designtokenfile');
var designtokendb = require ('./designtokendb');
var TYPE=process.env.TYPE;
var DesignFactory={};
DesignFactory.storeDesign = function(TYPE) {
if (TYPE == 'file') {
var data=design.designtokenfile.load();
console.log(data);
} else if (TYPE == 'db') {
return designtokendb;
}
};
module.exports.design=DesignFactory;
现在,我有另一个designtokenfile.js文件,
designtokenfile.js:
var fs = require('fs');
var load = function() {
fs.readFile('output.txt', 'utf8', function (err,data) {
return data;
if (err) {
return console.log(err);
}
});
};
module.exports.load=load;
所以我的问题是我无法从load方法返回数据。当我打印从load函数返回的storeDesign方法中的数据时,它显示undefined。
但是我想要output.txt的内容在storeDesign方法中。
请帮助我。是异步的,因此您需要传递回调函数或使用由于异步的性质,您得到的
是未定义的。。请尝试以下代码:
var fs = require('fs');
var load = function(callback) {
fs.readFile('output.txt', 'utf8', function (err,data) {
//return data;
callback(null, data);
if (err) {
callback("error", null);
}
});
};
module.exports.load=load;
var fs = require('fs');
var dotenv = require('dotenv');
dotenv.load();
var designtokenfile = require ('./designtokenfile');
var designtokendb = require ('./designtokendb');
var TYPE=process.env.TYPE;
var DesignFactory={};
DesignFactory.storeDesign = function(TYPE) {
if (TYPE == 'file') {
var data=design.designtokenfile.load(function(err, res){
if(err){
} else {
console.log(data);
}
});
} else if (TYPE == 'db') {
return designtokendb;
}
};
module.exports.design=DesignFactory;
而不是:
var load = function() {
fs.readFile('output.txt', 'utf8', function (err, data) {
return data;
if (err) {
return console.log(err);
}
});
};
由于无法到达返回
后的如果
,则无法工作,请使用以下命令:
var load = function(cb) {
fs.readFile('output.txt', 'utf8', function (err,data) {
if (err) {
console.log(err);
return cb(err);
}
cb(null, data);
});
};
var load = function(cb) {
return new Promise(resolve, reject) {
fs.readFile('output.txt', 'utf8', function (err, data) {
if (err) {
console.log(err);
reject(err);
}
resolve(data);
});
});
};
然后像这样使用它:
load((err, data) => {
if (err) {
// handle error
} else {
// handle success
}
});
load().then(data => {
// handle success
}).catch(err => {
// handle error
});
或者使用以下命令:
var load = function(cb) {
fs.readFile('output.txt', 'utf8', function (err,data) {
if (err) {
console.log(err);
return cb(err);
}
cb(null, data);
});
};
var load = function(cb) {
return new Promise(resolve, reject) {
fs.readFile('output.txt', 'utf8', function (err, data) {
if (err) {
console.log(err);
reject(err);
}
resolve(data);
});
});
};
然后像这样使用它:
load((err, data) => {
if (err) {
// handle error
} else {
// handle success
}
});
load().then(data => {
// handle success
}).catch(err => {
// handle error
});
换句话说,您不能从异步函数的回调返回值。您的函数需要执行回调或返回承诺
您需要更多地了解节点的异步性质、承诺和回调。关于堆栈溢出,我可以推荐很多问题和答案:
回调可能重复使用