JavaScript中的异步回调
Asynchronous callbacks in JavaScript
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
对象可以访问数据库值,我需要在获取数据回调中呈现视图。
所以,当我需要,比如说,向我的DB发出6个请求时,我将不得不在6个回调中嵌入我的res
对象?
或者有没有不同的方法可以使代码更可读,保持异步?
最终,我需要一种方法,在一个请求中多次从数据库中获取数据,这样不会让我的代码看起来像圣诞树。
即使不使用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
将是更好的解决方案。
相关文章:
- Meteor:异步回调问题
- Meteor:异步函数回调异常:onAfterAction
- 异步中的回调函数出现问题'张贴'
- JavaScript中的异步回调
- 如何将此异步回调转换为生成器
- 在Nodejs中堆叠异步回调事件的最佳方式
- 如何使用jQuery等待来自回调的异步调用
- 从异步回调中获取值
- jasmine 2-在jasmine指定的超时时间内未调用异步回调.DEFAULT_TIMEOUT_INTERVAL
- 将数据注入异步回调(使用 node.js)
- 由于异步回调,变量被覆盖
- 与 promise 一起使用时,异步瀑布不执行下一个回调方法
- 如何将状态对象/数据传递给(异步)ajax 回调
- 管理Meteor中的异步回调
- 如何通过一个回调异步排队和执行多个promise
- 如何等到异步回调完成后才能使用检索到的数据
- 如何在node.js中通过API回调异步递归
- 将数据传递给node.js回调——异步问题
- 从回调(异步方法)内部访问对象文字属性
- 使 JavaScript 函数与回调异步