Promise 入门(推荐)

课程地址:https://www.imooc.com/learn/949git

 1、课程介绍及异步问题

未来的状态github

错误1:入栈出栈,先后两个函数不在同一个栈。异步回调的过程当中没有办法是由try...catchpromise

错误2:前面声明的变量不只能被外面函数使用,也能被别的函数使用修改,违背关注点统一的原则异步

总结:异步回调函数会在一个新的栈里运行,因此在这个栈是没办法获取以前栈的信息的,以前抛出的信息的,异步回调的时候没有办法像之前那样try...catch处理错误;没有办法判断这些文件何时处理完成,因此在高级做用域链-外层声明不少变量,内层去使用,致使被其余修改函数

2、Promise 入门

若是只有一个异步回调使用promise是没有意义的,只有在多个连续的异步回调里,promise才有意义测试

start——1秒以后输出the promise fulfilled——2秒以后刷出hello,worldspa

在任何地方生成一个promise队列,能够把它做为变量传递到其余地方.net

若是操做是一个很明显的队列(先进先出),能够在后面追叙then3d

无论前面状态是否是完成了,都会按照顺序完成。若是完成了,后面返回的then也会获得前面promise返回的值队列

这三个是同时输出

then没有等到里面的promise返回的实例,直接执行了下一个then,可是这个then里面当即执行里的promise里的定时器又会在2s以后执行

在promise实例里若是不直接返回promise实例,他就会直接执行下一个,即时里面返回了false,也不影响下一步,由于false会直接传递到下面

没有明确返回值,至关于返回undefind。

整个进程仍然是等到完成才会执行

3、小测试

展开里面的then。执行效果同样,看起来更清晰

假设dosomething和dosomethingelse都返回promise实例

第二种:当then也发生错误,catch也能够捕获

catch也会返回promise实例,而且其中没有抛出错误的话,他返回的实例也是fulfilled的状态

变化后,跳过2个then,到下一个catch

4、Promise 进阶

 

prommise的状态只能由执行器里面改变,不能由外界改变

将来版本会提升reject的权重,会终止这段代码的执行

P2输出后,进程并无执行完,进程须要等待P1执行完才能完

 

jQuery3.0及以后版本支持完整promise规范,以前和标准规范有些诧异

IE8-11都不支持promise,IE edge支持

源码:https://github.com/merrier/imooc-promise-sample

相关文章
相关标签/搜索