我是一名PHP开发人员,目前我正在开发一个node.js项目,我之前从未遇到异步,因此让我感到困惑。
我真的必须这样做吗?
// user model
exports.getRandomUser = function(cb){
db.query('...query...', cb);
}
// post model
exports.getRandomPost = function(uid, cb){
db.query('...query...', cb);
}
// router
router.get('/', function(req, res) {
user.getRandomUser(function(userInfo){
post.getRandomPost(userInfo.id, function(postInfo){
res.render('post', {data: postInfo});
});
});
});
有没有办法让它不那么混乱?
答案 0 :(得分:0)
很好的问题,是的,有一种更简化的方式。你在这里做的是回调后的回调,这使得代码看起来很混乱'
通常称为回调地狱
现在它看起来很标准,但随着时间的推移它会变成一个饥饿的编程能力兽,需要你一直关注。
对于一个javascript专家而言,它并不是很难处理它,但如果你想在接近回调时有一个更轻松的风格;你可以使用 promises 。承诺是JS未来的一种方式,但我认为理解 BOTH
是件好事。回调主要有两个参数,如下所示:
dothis(function (error, data) {
if (error) {
throw new Error(error)
}
console.log('we have data', data)
})
通过承诺,这在语义术语中变得更容易理解
dothis.then(function(data) {
console.log('we have data', data)
}).catch(function(error) {
throw new Error(error)
})
这当然只有在你的函数是保证兼容的情况下才有效,如果你想了解更多关于promises的信息,请查看本教程github:https://github.com/then/promise
您甚至可以链接承诺并创建一个非常干净的代码库!