为什么需要promise
有时候需要向函数中传入回调函数(异步操作结束后执行),这么一来可能就会有多重函数嵌套的情况。这样的问题很明显:
- 耦合度高
- 解耦要传函数指针
- 安全考虑还需判断参数类型,可读性差
- 如果传送匿名参数,可读性更差
Promise写法
1 | function callRing(success) { |
.then(function)
,传入promise对象的参数resolve和reject- 当然,可以传入两个参数,即第二个参数就是reject。用来指定reject回调
.catch(function)
- 它就是then的第二个参数
- 这么写能够处理执行resolve遇到异常的情况
- 如果resolve执行时遇到异常,将会条到
.catch
中
- 如果resolve执行时遇到异常,将会条到
Promise还有很多用法:all,race等
async、await
如果不喜欢.then这样的写法,可以使用async、await的写法
async的本质就是promise的语法糖,标记了async的function里面可以执行await的同步方法,await后的代码要等待await执行完成。
[猜]为什么promise能够做到同步呢?即.then().then()的同步原理
- 当执行第一个promise时,是异步操作,最后才能返回promise。所以如果promise没返回就不会执行下一个
1 | // callRing函数不变 |
或使用IIFE的写法,定义成匿名函数然后立即执行
1 | // callRing函数不变 |