如何做好异步?

时间:2017-08-05 21:21:38

标签: node.js express asynchronous

我是一名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});
        });
    });
});

有没有办法让它不那么混乱?

1 个答案:

答案 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

您甚至可以链接承诺并创建一个非常干净的代码库!