express解决回调嵌套问题?

在学习express时候,后台数据操作需要不停callback,以前没发现有什么不好的,会做一些简单封装,现在觉得太难看,那么长一堆,搜了一下,有人说async,有人说bluebird.js,有人说co.js,那应该用什么能够解决嵌套问题,从使用来说那个更易实现,直接用promise行不行?

阅读 4.7k
6 个回答

如果你在后台已经配置了ES6的babel转换,那么可以直接使用promise,或是可以进一步尝试一下ES7的async/await。
如果觉得配置上比较麻烦,可以直接使用co, bluebird这样的promise库,已经对于原生的promise进行了一定的封装。
【好吧,突然发现现在已经是node可以直接上ES6的时代了】

Promise是一种,实则还是嵌套的就是看起来好看些,比较舒服的做法是用async/await,另外很多node的db的库都提供了sync的方法的,至少dao层不需要写成回调函数了。如果你的后端嵌套过多了,是不是应该换个思路想想设计是否合理呢。

取决于你的Node版本,低版本可以用generator/yield的方式,高版本可以直接用async/await

app.get('/', async (req, res, next) => {
    let user = await User.findById(); // assuming .findById() returns a primise
    let org = await Org.findById();
    res.json({
        user: user,
        org: org,
    });
});

更多参见这篇讨论:https://github.com/expressjs/...

oc,async本质上用的都是promise,promise完全可以实现同步。

因为嵌套太多所以express框架并不是太好

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题