最近几个月都在写nodejs代码,发现自己有点焦虑症的倾向了,主要表现在:
- 如果同一个函数有同步版本和异步版本,用同步版本会深深地自责,即使有些情况下用同步版本明显会简化逻辑;
- 写代码的时候会小心翼翼,怀疑每行代码都有出错的可能,如果一个函数没有在回调中返回err参数,会感觉失去了安全感;
- 实现一个功能首先会到npm上搜一搜有没有现成的包,即使这个功能很简单,也不愿意自己动手写一个,原因在于生怕自己对edge cases考虑不周。要是碰到有多个现成的包,又会花很长时间比较。
现在对我来说callback hell 已经不是问题了, promise 也好 / callback 也罢(大不了我自己 promisify 吗), 异步就好… 要是同步版本反而会担心阻塞 EventLoop, 像我发现 crypto 模块, hash / hmac / ciper / deciper 都是同步的, 会阻塞 还有一点就是 GC 经常出问题 … 风扇狂转 / cpu 100% / 内存飙高 … 甚是蛋疼
暴露 promise 接口怎么是坏味道了…
那你放心, in the coming soon … async/await 变的不用 babel 了, 大家都写 async function fn
了, 然后fn() 都是 Promise 了哈哈哈
@magicdawn 用promise, generator,aync/await都是自己的选择,如果你开发一个包,API应该以原生的callback方式暴露,而不应该强迫别人用promise。nodejs的设计也是选择了原生的callback而放弃了promise,我们应该遵循这个惯例
@magicdawn async/await 和 Promise有关系吗? Promise和异步也没关系,甚至generator和异步也没关系, Promise是维护内部状态的一个封装,要理解这一点就好办了。 我现在有一些同步代码,适合时也会写成Promise,为的就是这个规范的状态封装。
@magicdawn 我也不认为async/await会成为终极的解决方案。我会预见到当async/await大规模使用时,一些问题会随着用例的增多逐渐地显现出来,到时候大家又会回到原生的callback。因为你用同步的思维写异步程序,终究是个错误的方向
对, 用 promise.then / 用 co 去 yield / 用 babel 去 await 是自己的选择, 但是你有没有发现, 他们只有一点要求, 即是你接口返回 Promise 值, 三者普适… 哈哈哈~你用 callback 也没人拦你… 不过 mogoose / sequelize blabla 的库在往这边转哦 最后安利下 https://cnodejs.org/topic/573b2d64fcf698421d20359d
加上一点: callback event promise when then bluebird co defferred yield async await express koa koa2 angular react vuejs middleware 自从我开始写nodejs就患上了概念恐惧症,第天在论坛里都看到新概念。不管怎么升级,总觉得不够等级。
@magicdawn 2009 年,Kris Zyp 有感于dojo.Deferred 的影响力提出了CommonJS 之Promises/A 规范①。同年,Node.js 首次亮相。Node 早期的几个版本在其非阻塞式API 中用到了Promise。但到了2010 年2 月,Ryan Dahl 决定切换至当时为人所熟知的callback(err, result…)格式,因为Promise 是一种属于“用户之境”的甚高层构造
–《javascript异步编程》