![](/img/trans.png)
[英]How can I export module pattern function to another JavaScript file
[英]How to call module export function from another file in javascript
我是javascript / node js的新手。 所以关于js中的函数的一点点让我感到困惑。 我有问题。
我在一个名为getUserById
的文件(appModel.js)中有一个函数,它通过id
作为参数从数据库返回一行。
User.getUserById = function getUserById(id,result){
var koneksi = new newDb();
koneksi.query('Select ID, email, name, status, telp_no, company_id, created_at, updated_at from user where ID = ?',id)
.then(rows=>{
console.log("user: ",rows);
result(null,rows);
})
.catch(err=>{
console.log('error: ',err);
koneksi.close().then(()=>result(err,null));
});
};
module.exports = User;
我使用来自(appRoute.js)的不同文件访问appModel文件
var User = require('../models/appModel');
我试图在appRoute.js中访问getUserById函数
var _a;
var _check = User.getUserById(req.params.id, function(err,user){
if(err){
_a = err;
}else{
_a = user;
}
return _a;
});
console.log('res', _check);
当我打印_check
本身时,结果是res undefined
所以,我希望这个函数的输出是error
或user
本身。 我怎么能得到它?
您的问题实际上与模块无关。
实际上,它通常缺乏对异步进程和闭包的理解。
如果你在下面添加一个console.log,你会发现'res'在'done'之前运行。
var _a;
var _check = User.getUserById(req.params.id, function(err,user){
console.log('done', err, user); // <-- Add this in here.
if(err){
_a = err;
}else{
_a = user;
}
return _a;
});
console.log('res', _check);
关于闭包的第二部分,这里的返回值被忽略:
_check = User.getUserById(req.params.id, function(err,user){
...
return _a; // This is ignored. It will never be assigned to _check.
}
返回值实际上来自:
function getUserById(id,result){
var koneksi = new newDb();
...
return "test"; // Here. Add this last line and try again.
};
您没有从getUserById
返回任何getUserById
,因此在JavaScript中向函数添加显式返回之前,调用它的结果将始终undefined
。
您的result
函数只是一个回调。 虽然它确实返回了一个值,但该值不会在getUserById
被进一步使用或传递给其他任何值,主要是因为您没有从then
/ catch
块返回任何内容。
有关Promises的建议阅读: https : //developers.google.com/web/fundamentals/primers/promises
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.