1
c060604 2014-04-13 13:58:37 +08:00
|
2
emric 2014-04-13 14:02:04 +08:00 via iPhone
异步. 关于深入理解, 你可以看看它的实现. 很简单, 大概 200 行代码左右.
|
3
jsonline 2014-04-13 14:06:48 +08:00
$.ajax 就是 promise 的经典应用
|
4
xu33 2014-04-13 14:49:20 +08:00
优势在于连续的异步回调嵌套的场景,可以用一种近似于同步的语法来表现
|
5
jsonline 2014-04-13 14:53:37 +08:00 via Android
Promise 的存在不是为了让语法看起来像同步,而是为了让回调的使用更有章法,更可控
|
6
jasli2 2014-04-13 15:35:34 +08:00
|
7
andyhu 2014-04-13 18:00:23 +08:00
还是等待es6的generator吧
|
8
jakwings 2014-04-13 18:48:02 +08:00
阮一峰的笔记介绍得不错: http://javascript.ruanyifeng.com/advanced/asynchronous.html#toc4
另外附加一下文章中的一个要点:NodeJS 的 setImmediate(fn) 和 setTimeout(fn,0) 不同,可以使得必须在完成了目前线程的指令流之后才异步执行 fn ,另外 setImmediate 和 setTimeout 所占的事件队列是分离的。 所以文章中的示例代码才能实现 (new Promise(fn1)).then(fn2) 而不怕 fn1 在绑定 fn2 之前就运行完毕。 |
9
ryanking8215 2014-04-13 21:22:18 +08:00
nodejs里解决回调嵌套的方法有好多,promise,async,eventproxy,等等。后2者只是在局部范围内解决问题,但是promise是从根本上入手,支持promise,你就可以随心所欲的.then().then().fail(),整个项目,整个框架都可以用promise组织实现,要不promise怎么会有规范呢?
我觉得nodejs应该原生就支持promise,现在这样有点可惜。 |
10
ryanking8215 2014-04-13 21:23:19 +08:00
跑题了,ORM框架sequelizejs api就用了promise实现
|
11
leecade 2014-04-13 22:45:55 +08:00
promise 只是提出一种包装规范, 在浏览器端过渡用的, 没有实质性的东西
主要是需要流程解耦的场景, 比如动画队列和前端资源加载优化 有人说 nodejs 要原生支持 promise, 我觉得如果真这样做的话, 眼光太短浅了, node 等的还是下一代的异步编程: 协程 ES6 的 generator 已经内置了类似的包装规范, 并且从底层运行机制进行了支持, 带来一些新的特性比如执行中断 目前已经有很火的应用: koa 框架, 构建在协程的思想上, 具体可看: https://github.com/visionmedia/co |
14
xcc7624 OP |