1、Promise是什么
词语本意
许诺;允诺;有可能
MDN
The Promise object is used for asynchronous computations
- Promise用于异步计算A Promise represents a value which may be available now, or in the future, or never
- 一个Promise表示一个现在、将来或永不可能可用的值
按照用途来解释
主要用于异步计算
可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果
可以在对象之间传递和操作Promise,帮助我们处理队列
2、异步
JavaScript包含大量的异步操作
JavaScript为检查表单而生
创造它的首要目标是操作DOM
异步:将耗时很长的A工作交给系统后,就去继续做B交付的工作,等到系统完成前面的工作之后,再通过回调或者事件,继续做A剩下的工作【从观察者的角度看:AB工作的完成顺序,和交付他们的时间顺序无关,所以叫异步】
异步操作的常见语法
- 事件侦听与响应
document.getElementById('start').addEventListener('click', start, false);
function start() {
// -> 响应事件,进行相应的操作
}
$("#start").on('click', start);
- 回调
// -> 比较常见的有ajax
$.ajax({
url: '',
success: function(res) {
// -> 这里就是回调函数
}
});
// -> 或者在页面加载完毕后回调
$(function() {
// -> 这里也是回调函数
});
浏览器中的JavaScript
异步操作以事件为主
回调主要出现在ajax和file api
NodeJs的出现
对异步的依赖进一步加剧了
无阻塞高并发,是NodeJs的招牌
异步操作是其保障
大量操作依赖回调函数
3、异步回调的问题
嵌套层次很深,难以维护
无法正常使用return和throw
无法正常检索堆栈信息
多个回调之间难以建立联系
4、Promise简介
是一个代理对象,它和原先要进行的操作并无关系
通过引入一个回调,避免更多的回调
5、Promise的状态
pending
- [待定]初始状态fulfilled
- [实现]操作成功rejected
- [被否决]操作失败Promise的状态发生改变,就会触发.then()的响应函数处理后续步骤
Promise的状态一经改变,不会再变
console.log('here we go');
new Promise(resolve => {
setTimeout(() => {
resolve('hello');
}, 2000);
}).then(value => {
console.log(value);
});