Promise
1.Promise是什么?
Promise 是一个对象,对象里存储一个状态,这个状态是可以随着内部的执行转化的。简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果
2.Promise作用:
1、主要用于异步计算 2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果 3、可以在对象之间传递和操作promise,帮助我们处理队列
3.为什么会有Promise?
为了避免界面冻结(任务)
同步(阻塞的)
张三叫李四去吃饭,李四一直忙得不停,张三一直等着,直到李四忙完两个人一块去吃饭
等浏览器向服务器请求数据,服务器比较忙,浏览器一直等着(页面白屏),直到服务器返回数据,浏览器才能显示页面
异步(非阻塞的)
张三叫李四去吃饭,李四在忙,张三说了一声然后自己就去吃饭了,李四忙完后自己去吃
等浏览器向服务器请求数据,服务器比较忙,浏览器可以自如的干原来的事情(显示页面),服务器返回数据的时候通知浏览器一声,浏览器把返回的数据再渲染到页面,局部更新
4.异步操作的常见语法
1.事件监听
document.getElementById('#start').addEventListener('click', start, false);
function start() {
// 响应事件,进行相应的操作
}
// jquery on 监听
$('#start').on('click', start)
2.回调
// 比较常见的有ajax
$.ajax('http://www.wyunfei.com/', {
success (res) {
// 这里可以监听res返回的数据做回调逻辑的处理
}
})
// 或者在页面加载完毕后回调
$(function() {
// 页面结构加载完成,做回调逻辑处理
})
5.Promise的三个状态
1、pending[待定]初始状态** 2、fulfilled[实现]操作成功 3、rejected[被否决]操作失败**
当Promise状态发生改变,就会触发then()里的响应函数处理后续步骤,promise状态一经改变,不会在变
Promise对象的状态改变 只有两种可能
1.从pending变为fulfilled 2.从pending变为rejected。 这两种情况只要发生,状态就凝固了,不会再变了
6.Promise的参数
1.reslove:
将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去
2.reject:
将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去