Seasons123 / blog-FE

web前端相关issue is my blog :lollipop:
2 stars 0 forks source link

promise,async await,generator 之间的关系 #17

Open Seasons123 opened 7 years ago

Seasons123 commented 7 years ago

这些都是当下解决异步回调嵌套的一种手段,promise感觉更像是是一种戏法,他从形式上把回调嵌套变换成回调队列,本来回调中嵌套回调是一种执行式结构的代码,promise把这种执行式的代码转变成了声明式(then 声明了一系列的回调队列 而利用resolve把他们连接起来)。 generator这玩意儿本身的作用是生成一系列的值,其实我们这里是利用了它yield xxx 可以使代码暂停与恢复的特性。他一般是配合promise使用的,yield 一个promise 然后代码暂停 等这个promise resolve之后恢复代码的执行,(这里又体现了promise的抽象意义promise是一种值 是一种被延迟得到的值 所以可以return 或者yield这个值) 因此generator+promise可以使业务代码完全变成同步形式 这一点做的比promise更好(promise只是从形式上改善了嵌套) 但是generator的这种用法毕竟是旁门左道,随着呼声越来越强烈 ES7推出出了async await形式上跟generator非常类似,具体实现是否跟generator类似不得而知,但不管怎样这是成为标准的东西,所以我想generator会渐渐淡出舞台