博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Promise 入门(推荐)
阅读量:6267 次
发布时间:2019-06-22

本文共 1088 字,大约阅读时间需要 3 分钟。

hot3.png

课程地址:

 一、课程介绍及异步问题

7c88454f629790abf21471d853017ef99de.jpg

b265e6a6ebc24725cc2d5690b3c12446fee.jpg

将来的状态

45d720ef70314934a83be87dbac004c9940.jpg

45b3d73e2a6d561c0f41bf1b3663495fda4.jpg

e10282dc60e265bd9ef72465145b4eca4fb.jpg

41c714b23312a6fa0207bf843464d4be7b4.jpg

633777601bbd90f8ea32ef699fcbf28af7b.jpg

92412b7e822b334d5337b8eeb94e3b31ef5.jpg

96eefa9ccc14317b517e707db8462ce378b.jpg

fb8d2e9175a74af223f0c048317c89653ce.jpg

3cca5b5a7158f28a2fdd1cf9ad7b1487bb1.jpg

8921278908c9351adb915027d4bd0576231.jpg

9e630a0ac7c93ba6fa735d249005f1300b6.jpg

1201f7b9d59a71524f48bd369a715bbb29e.jpg

eb139ee5e93e78f7264d6297488ddeb2541.jpg

f51d1ab98e7ef2c069cd05b1a83502f5ea1.jpg

861b971412b1e65546e490f8ac697810bc6.jpg

2808f51d455958c7c11ea03a21c31648fd2.jpg

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

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

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

3e48490f5e80210a69d4ca5280450f5e2c0.jpg

8d7c8acf661be1e87e347cfd5f784197d0b.jpg

二、Promise 入门

017ba76bd6fdbcf4b68e22dc8bdf19d1e4b.jpg

10cb92c424a6e9b3883f08b78cb47e113fb.jpg

2b5b584e44c8cd8d7fb128df610770e7a59.jpg

7b394d77eb6a220cfbd1df14744832b1592.jpg

4e762c334a589a765f37f89d4afad563cf5.jpg

d6e91559eeb225d5a3fcc70785fe879b16b.jpg

6ac7b8503dcd1e9162c1c17e1ae108de48c.jpg

efbcf09a7c767a67c1140036fbd56872085.jpg

9b6d84d49b3ed236f06d7af0fe77bfbeb29.jpg

b226da59d63c5607c246df2e33ac5cfa730.jpg

22a67ef71d118ffab80e8eba4d22c5e1ffd.jpg

027ad67b9e01768711bd9957487ffde7642.jpg

9394f707ca2570ff136286defa69bb109a2.jpg

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

8dd97bd915d81bc77863a8b5fa838e0cbac.jpg

2a29d945cdb37b9f88c0109867524a3857a.jpg

a4418d6401f1cbc4d21d496cc112db62a01.jpg

start——1秒之后输出the promise fulfilled——2秒之后刷出hello,world

在任何地方生成一个promise队列,可以把它作为变量传递到其他地方

如果操作是一个很明显的队列(先进先出),可以在后面追叙then

不管前面状态是不是完成了,都会按照顺序完成。如果完成了,后面返回的then也会得到前面promise返回的值

1ffb9dd4c708999864979963f480e08830e.jpg

1fa6687ac374b0f12587d67e24c2c6f3e65.jpg

97c4c36f452c6e5429a6ec502f2d72b2113.jpg

7062d18d2144444c5947a7d95f9ff3ea236.jpg

这三个是同时输出

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

在promise实例里如果不直接返回promise实例,他就会直接执行下一个,即时里面返回了false,也不影响下一步,因为false会直接传递到下面

a5b2f169f1b8d51475b6b8b49b9cfb595c1.jpg

没有明确返回值,相当于返回undefind。

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

42812658abdb17e8ec26ce36342a17474d6.jpg

3ac08123ee94e8fb724872663b062a18984.jpg

三、小测试

be86b5f241613e0fad190c4ee44f01a14be.jpg

002228b5c95f5e8562094fc204c7dd41996.jpg

83a63b4102c82821a9a578a985fd6154db9.jpg

531d4ba490bdb942dfda6909d66283387b6.jpg

bd85efa36ccd0e47e592a34994c08fb7d07.jpg

a1c94580f10d5e55edb3d6ad203fd62569b.jpg

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

e2090e7c8681f2719fa0a511c2b9031a79e.jpg

假设dosomething和dosomethingelse都返回promise实例

18c8cbc3e7d7a01d465d15e1fc3e4f3081f.jpg

a1ca5be2dd80975011de0b75560eefa33c3.jpg

917b46b9f41059bb736a6c4b58493744915.jpg

94112af2e115277a9c081cdc9a8344108c5.jpg

544d63b398ea792a48156e334750f31887e.jpg

e3d983b3df6a1fbe02dd758eb358808904d.jpg

2dcdf8f4c4045b54737d859aa2a3bfc1b9d.jpg

04aaf50423002ff5fe7b83888df2462c627.jpg

7763a4e69fe34a76ea51b2c29e6a729755e.jpg

13b90668631f3b0f406a4f487a9446f24d6.jpg

e2104cbcee39e4761ce08336bfa6f35667f.jpg

2e18801f1921be10a2136af5cb998c62a95.jpg

9d15d94c0b253359754c9b2d18b27cdc89e.jpg

第二种:当then也发生错误,catch也可以捕获

e266a0682d7f5702adbe4b66150fe4c29f3.jpg

24a86420ffc2105f84d97e5484c5438ae4b.jpg

2ce811c4d1ef16fb9f02731c9c3a17f967e.jpg

0d651246cd9f9b5ed2650bd5ac9b6f14418.jpg

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

23697e6add593261241407b8239b88c78fa.jpg

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

d64310d9b7a473aaae606b93544432b8724.jpg

四、Promise 进阶

36ddb405dd7e6e6a21c85776b823ae60c88.jpg

b7afd754f1e2d8ebb1c17a717d9c67a6875.jpg

 

f4bc0296fad16f5cd1a4e24040636d9352f.jpg

cc72be7b8a04ce270753c49a425f472e811.jpg

d7c0a4eb0bfac48ba78c7f84e0ebc069bb3.jpg

e73a9b76539cfec7c7bde7108e01494be3d.jpg

ecc045348e9978822d74f95b5fccccfae79.jpg

cbf8a03bf090f09fcecbf165a290a9a15be.jpg

9d3cbda3ddfc195fcd6f28c35852ef8e811.jpg

6e3092dcd93b7212f8bc0634f11a163502f.jpg

4039afa45945270ac56120a0201f3451e51.jpg

8be600a5b067d553d242c009b863b281ff8.jpg

e1585f75d8380aa830cc501010e5c800237.jpg

66f1dfdc123c84905cb526f2f92e8745507.jpg

339c1971c9c6f233e2bbab91c6e32674797.jpg

8d2d6a6a7382f56dc38b95740b6fed02589.jpg

2e86eb97246d0558467a12f781be5e52456.jpg

10c4cd12e9048db6e42210c1e5ac75d3c55.jpg

3dcb6277aab29788ff9208951457584c630.jpg

9aae80b06b890dff71fb00b2d3fe0ef99e0.jpg

3adbe5b762f3660635be4382a883132397c.jpg

bb8c6970eb42bbb926c71490a1953d0d8f2.jpg

74533d0c8127bc2d2a35cdecdd3c928dcca.jpg

1c5648698f7a2ef1d0580a76f68adfb85c6.jpg

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

d4ee8d1bb6a5afb7acfdd77b87492c960d9.jpg

c8debbba40566c2eaa38a10a620c7f4f914.jpg

aa9e4f3b870138c642dfb17b71c2a6d4cbd.jpg

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

8914696d3c7dc9f41ae705368fea2e693a7.jpg

a0f1d1b08c1266a5fadf86d26cd80df204d.jpg

8ebe9b2f5273f47f0213835bcd6db0a7222.jpg

P2输出后,进程并没有执行完,进程需要等待P1执行完才能完

6719e4d48865b4feba449253fc85b9d8c45.jpg

53f230e1f50437fe40211a8be7f46cb3167.jpg

8cc93e5d5a3cc210925c882007fbd0e1e99.jpg

6ae7be7b12a2e45fc06d5a07c2ffb77cedc.jpg

a285b8ab0d42e3010ecf928649f22e94a9a.jpg

c18e340af50c188d99e83e86efc6fdabef3.jpg

8b0c321055f5b157032b0ae277b0199fd24.jpg

deb33522e388d38bd5c175412088fdbf48d.jpg

 77c61618164a8efca5e0730d192f8688089.jpg

be252666b4b6aa1ff6bf47db96829fb350c.jpg

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

bb1d80e6de7c5709665ecc3c951642a17e5.jpg

c7a9a6fb6bbd0148ba6a784ba7b766afc68.jpg

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

894eafc752f4ce42b1f3d32a909c68cf75c.jpg

b0d73e91fb30773b6548db649478ceb8461.jpg

f24ccd3b134c00096cb9b1b73a82365ec25.jpg

6d8f98a4fa51279a09d3214cede8e0cf6aa.jpg

ce59a1a13b18acbfc23b50bd3f4f6439235.jpg

e14f9a3a93e48e47213264f6d009cd7b7fa.jpg

源码:

转载于:https://my.oschina.net/u/3018050/blog/1947238

你可能感兴趣的文章
02@在类的头文件中尽量少引入其他头文件
查看>>
JAVA IO BIO NIO AIO
查看>>
input checkbox 复选框大小修改
查看>>
网吧维护工具
查看>>
BOOT.INI文件参数
查看>>
vmstat详解
查看>>
新年第一镖
查看>>
unbtu使用笔记
查看>>
MaxCompute 学习计划(一)
查看>>
OEA 中 WPF 树型表格虚拟化设计方案
查看>>
Android程序开发初级教程(一) 开始 Hello Android
查看>>
使用Gradle打RPM包
查看>>
“我意识到”的意义
查看>>
淘宝天猫上新辅助工具-新品填表
查看>>
再学 GDI+[43]: 文本输出 - 获取已安装的字体列表
查看>>
nginx反向代理
查看>>
操作系统真实的虚拟内存是什么样的(一)
查看>>
hadoop、hbase、zookeeper集群搭建
查看>>
python中一切皆对象------类的基础(五)
查看>>
modprobe
查看>>