首先我们要清楚在JavaScript中所有的代码执行都是单线程的这就导致所有网络操作,浏览器事件等都是异步进行的 我们一般通过回调函数callback来实现异步 但是回调过多会产生回调地狱
比如我们常使用的Ajax就是一个典型的异步操作
我们在success和fail中去实现异步的函数
request.onreadystatechange = function () {
if (request.readyState === 4) {
if (request.status === 200) {
return success(request.responseText);
} else {
return fail(request.status);
}
}
}
在我们ES6中出现了一个Promise对象可以起到同步代码实现异步操作,更直观更便于管理
ES6 将程序分为了三种状态而我们的Promise就是起到一个推动程序的状态(但所有的状态都是不可逆的)
- pending:等待 处于未决阶段,表示事情还是在挂起,最后的结果没有出来
- resolved:已处理 处于已决阶段,表示整个事情已经出现结果,并且可以按照正常的逻辑进行下去
- rejected:已拒绝 处于已决阶段,表示整个事情已经出现结果,并且是一个无法按照正常逻辑进行下去
下面我们看一个简单的功能用promise实现
随机生成一个0-2的数字,如果小于1则返回成功,否则返回失败