PHP开发人员,我正在与NodeJS搏斗一段时间,我仍然无法理解异步是JS / Node的想法。
看看这个(ExpressJS):
router.get('/:id', function (req, res, next) {
var id = req.params.id;
var db = new Firebase('some_firebase_db');
db.child("users/"+id).once('value', function (snapshot) {
var user = snapshot.val();
if (user) {
db.child("messages/"+id).once('value', function (snapshot) {
res.render('user/messages', {
'user': user,
'messages': snapshot.val()
});
});
} else {
res.render('404');
}
});
});
要使res
对象可以访问数据库值,我需要在获取数据回调中呈现视图。
因此,当我需要向我的数据库发出6个请求时,我必须将我的res
对象嵌入6个回调中?
或者是否有不同的方法可以使代码更具可读性,使其保持异步?
最终,我需要一种方法在一次请求中多次从db中获取数据,这不会使我的代码看起来像圣诞树。
答案 0 :(得分:2)
即使不使用async
或Promise
:
router.get('/:id', function(req, res, next) {
var id = req.params.id;
var db = new Firebase('some_firebase_db');
db.child("users/" + id).once('value', userResult);
function userResult(snapshot) {
var user = snapshot.val();
if (user) {
db.child("messages/" + id).once('value', messageResult);
} else {
res.render('404');
}
}
function messageResult(snapshot) {
res.render('user/messages', {
'user': user,
'messages': snapshot.val()
});
}
});
但使用async
或Promise
将是更好的解决方案。