javascript - 回调函数里面的callback不是很理解,求解释?
本文介绍了javascript - 回调函数里面的callback不是很理解,求解释?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
代码用于查数据库,采用express框架。不是很理解get方法里面的callback,该函数返回值是什么?callback(null, user);
这里为什么第一个参数是null?感觉JS回调自己理解的不是很清楚
//读取用户信息
function User(user) {
this.name = user.name;
this.password = user.password;
this.email = user.email;
};
User.get = function(name, callback) {
//打开数据库
mongodb.open(function(err, db) {
if (err) {
return callback(err); //错误,返回 err 信息
}
//读取 users 集合
db.collection('users', function(err, collection) {
if (err) {
mongodb.close();
return callback(err); //错误,返回 err 信息
}
//查找用户名(name键)值为 name 一个文档
collection.findOne({
name: name
}, function(err, user) {
mongodb.close();
if (err) {
return callback(err); //失败!返回 err 信息
}
callback(null, user); //成功!返回查询的用户信息
});
});
});
};
函数调用
User.get(newUser.name, function(err, user) {
if (err) {
req.flash('error', err);
return res.redirect('/');
}
if (user) {
req.flash('error', '用户已存在!');
return res.redirect('/reg'); //返回注册页
}
//如果不存在则新增用户
newUser.save(function(err, user) {
if (err) {
req.flash('error', err);
return res.redirect('/reg'); //注册失败返回主册页
}
req.session.user = newUser; //用户信息存入 session
req.flash('success', '注册成功!');
res.redirect('/'); //注册成功后返回主页
});
});
});
解决方案
callback只是一个普通的函数,叫回调是因为它一般是在传入的函数运行结束时被调用
该函数返回值是什么?
看你传进来的callback
是什么
callback(null, user);这里为什么第一个参数是null?
如果有错,第一个是参数是错误,否则是null
,callback
函数通过检查第一个返回值来判断是否出错
一个无聊的例子
function fa(a, callback) {
if (a == 1) {
fb(3, callback);
} else {
callback("err: a != 1");
}
}
function fb(b, callback) {
if (b === 3) {
callback("err: b == 3");
} else {
callback(null, "b != 3");
}
}
fa(1, function (err, res) {
if (err) {
console.error(err);
} else {
console.log("success");
console.log(res);
}
});
输出为
err: b == 3
这篇关于javascript - 回调函数里面的callback不是很理解,求解释?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文