在nodejs中使用promise和orm 请大牛帮忙,万分感谢
前阵子做的项目中,字段比较多,初学node代码写的很混乱,最终成了酱紫:
现在准备重构这个项目,callback用promise替代,用orm替代手写sql语句,这里有两个问题:
.defered()
方法在函数入口处promise化,然后继续逻辑处理?tks
Archiver|手机版|小黑屋| PhoneGap中文网 ( 京ICP备13027796号-1 )
GMT+8, 2024-5-21 13:01 , Processed in 0.064561 second(s), 11 queries .
Powered by Discuz! X3.2
© 2001-2013 Comsenz Inc.
promise 不懂,我喜欢用 eventproxy,用事件思想来解耦比较好懂。
promise库推荐bluebird,现在promise库大部分都支持对node格式的回调进行直接转换,不用再手动处理了,比如bluebird提供的Promise.promisify接口
@alsotang 你竟然不懂promise…… 我认为promise代码还是比eventproxy容易读,更符合人类思维方式
@ravenwang 我本身也蛮喜欢事件回调的
@ravenwang 看了这个系列文章:http://segmentfault.com/blog/kk_470661/1190000000586666 (链接后面的文字也会成文链接) 就先使用 Q 没有用 bluebird 了,不知道是智商不够还是和棒子思维不一样,很难入门 Q
@alsotang 我发现链接后面还有文字也会被转成链接,加一个\就行了,示例:http://cnodejs.org/topic/5422f46829fd004a6a13b91d,aabbccdd
@klamtlne 链接空一格就好了
使用bluebird吧,我也是最近重构自己的代码,换了bluebird
最近在写一个非常简陋的支持 memcached 绑定的 ORM,查询兼容 callback 和 promise 模式。
看到这么多回调吓鸟了, 还是感觉用Promise模块好
重构完成后,首页是酱紫的:
ListAll()
是定义在model中的方法,路由的逻辑被Controller层handle,简直酸爽@klamtlne 楼主是用Q模块么?能不能给个demo我看看?
@alsotang 我想问一下howdo用过没有情况如何。
:-O 我好喜欢工工整整的代码。
@jeffreyluo 不是Q,是orm内置的,他们用的是bluebird。不过如果你catch到了promise的核心,其实都大同小异了。
以前写过的一个答案:如何用nodejs 把业务逻辑写的漂亮
@klamtlne 比如有两个方法,a和b,b中要用a返回的数据查询数据库,a().then(b)这样貌似做不到吧?
Q太重了 硬是要用promise的话 推荐when.js 不过你还可以试试 co,把node版本升级到0.12+
@jeffreyluo 看我前面给的链接
@alsotang 弄懂回调才是根本,在这个基础上,async eventproxy promise 自然就都明白了。有些人本末倒置了,还要来惊诧一下。
弄不明白回调的,上面的库再华丽,也是纸糊的。因为库不可能帮人解决所有问题,如果这个库有解决所有问题的愿望,就会变得很复杂很庞大,那就陷入了另一个无法理解的境地。所以我认为弄懂根本才是正途。
我也很喜欢回调,所以我喜欢async。
@coordcn 把问题无限拔高再来批判,提升逼格,没谁说promise解决了所有问题,而且你凭什么就假设别人就不懂回调?无聊
用yield处理回调呀,tj大神的co很好用的,node v0.11版本 支持 es6 的yield,再用koajs就好极了,哈哈,另外我自己是觉得没必要非要搞个orm,自己写个sql模板,把sql和js代码分离出来,用的时候用参数填充下sql模板,又轻量又简洁。
@chemdemo 推荐when.js,快而且小,基本够用。
@yeaha 没必要扣这么大的帽子,如果你认为我的语言让你不舒服了,还请见谅。
你仔细读下我的文字,我的意思是用各种库之前要真正理解了回调本身,我并没有针对个别人。如果说要针对,仅仅对那个惊诧的人而已,我也只是说了本末倒置,并未假设他就不懂回调。
谁都是从这个过程过来的,或者说是大部分接触异步IO回调都会面临这样的问题, eventproxy 和 async 都是不错的解决方案.