您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > #LAMP人#NodeJS异步编程
Node.js异步编程AsynchronousProgrammingby@朴灵113年7月6⽇日星期六Aboutme•@朴灵/⽥田永强•就职阿⾥里数据平台产品部开发⼯工程师•《深⼊入浅出Node.js》专栏(书)作者213年7月6⽇日星期六Agenda•PyramidofDoom•Callbacks•Events•Deferred/Promise•FlowControl313年7月6⽇日星期六PyramidofDoom413年7月6⽇日星期六别笑,我是回调函数513年7月6⽇日星期六排个序613年7月6⽇日星期六再排个序713年7月6⽇日星期六⾼高阶函数•可以将函数作为参数或者返回值•map,filter,forEach,reduce,every?813年7月6⽇日星期六⾼高阶函数913年7月6⽇日星期六常⻅见场景1013年7月6⽇日星期六嵌套过深怎解?•视图渲染分别需要如下资源:•数据•模版•本地化资源1113年7月6⽇日星期六⻚页⾯面渲染1213年7月6⽇日星期六问题还是没有解决•性能差!!!•代码丑!!!•⽼老⼦子再也不写Node.js1313年7月6⽇日星期六1413年7月6⽇日星期六•⼀一个能搞定回调函数嵌套问题的男⼈人1513年7月6⽇日星期六初阶EventProxy1613年7月6⽇日星期六EventProxy好处1713年7月6⽇日星期六EventProxy好处•不再串⾏行执⾏行,并⾏行异步,效率提升1713年7月6⽇日星期六EventProxy好处•不再串⾏行执⾏行,并⾏行异步,效率提升•通过事件传递数据1713年7月6⽇日星期六EventProxy好处•不再串⾏行执⾏行,并⾏行异步,效率提升•通过事件传递数据•搞定嵌套函数过深的问题1713年7月6⽇日星期六EventProxy好处•不再串⾏行执⾏行,并⾏行异步,效率提升•通过事件传递数据•搞定嵌套函数过深的问题•对结果收敛,不执着细节1713年7月6⽇日星期六主要⼿手段•计数器•事件1813年7月6⽇日星期六问题•事件必须先绑定,后触发1913年7月6⽇日星期六Deferred/Promise•CommonJS之Promise规范•Promise/A•Promise/B•Promise/D2013年7月6⽇日星期六⺫⽬目的•异步的⾏行为与逻辑的绑定分离•顺便解决代码嵌套的问题2113年7月6⽇日星期六典型应⽤用2213年7月6⽇日星期六基本原理•状态机2313年7月6⽇日星期六状态转换未完成态完成态失败态2413年7月6⽇日星期六then2513年7月6⽇日星期六Deferred/Promise关系•Deferred主内,改变内部状态•resolve•reject•Promise主外,接受外部逻辑•then2613年7月6⽇日星期六deferredpromise未完成态完成态失败态then(sucess,error)2713年7月6⽇日星期六deferredpromisethenthen2813年7月6⽇日星期六⽰示例2913年7月6⽇日星期六实现Promise3013年7月6⽇日星期六实现Deferred3113年7月6⽇日星期六⽰示例3213年7月6⽇日星期六解决多异步协作3313年7月6⽇日星期六⻚页⾯面渲染3413年7月6⽇日星期六Deferred/Promise•Note:本实现不严谨•Deferred/Promise⾮非常易⽤用•缺点:要为每个异步场景预先封装3513年7月6⽇日星期六EventsVSPromise•事件•异步调⽤用过程⽆无需处理•需要预置业务逻辑•Promise•需要预先封装异步过程•调⽤用代码干净3613年7月6⽇日星期六更好的流程控制•不要前戏、要⾼高潮3713年7月6⽇日星期六Async.js3813年7月6⽇日星期六Step3913年7月6⽇日星期六实现原理•玩转⾼高阶函数•逻辑注⼊入4013年7月6⽇日星期六4113年7月6⽇日星期六4213年7月6⽇日星期六别忘了异常处理4313年7月6⽇日星期六感觉?•不⾼高端•不⼤大⽓气•不上档次4413年7月6⽇日星期六4513年7月6⽇日星期六⻚页⾯面渲染4613年7月6⽇日星期六⻚页⾯面渲染4713年7月6⽇日星期六Wind.js•基于Task的Promise•利⽤用编译技巧让⼈人同步写代码4813年7月6⽇日星期六ES6Harmony•Generators/Yield4913年7月6⽇日星期六总结•事件•队列•计数器•⾼高阶函数5013年7月6⽇日星期六阿⾥里数据平台招聘•Web⼯工程师(Node)•前端⼯工程师•数据可视化•数据相关职位•私信:@朴灵•邮件:puling.tyq@taobao.com5113年7月6⽇日星期六
本文标题:#LAMP人#NodeJS异步编程
链接地址:https://www.777doc.com/doc-5090958 .html