什么是promise?
promise:承诺
他是es6新增的构造器,用来优化实现异步操作,在没有它之前,javascript中的异步处理,大多是利用回调函数来实现的。典型的几种如下:(1)setTimeout (2)ajax (3)nodejs中的文件读取
promise的优点:
可以很好地解决回调地狱的问题(避免了层层嵌套的回调函数)。
语法非常简洁。Promise 对象提供了简洁的API,使得控制异步操作更加容易。
例如:
$.ajax({
url: '',
data:{},
success(res) {}
})
通过promise的写法,可以改写成:
$.ajax({url, data}).then(res=>{})
Promise构造器
格式
输出:
输出:
输出:
总结:promise对象:
1. 状态: pending, resolved(fulfilled) 成功, rejected 失败
2. 值: resolve,reject调用时传入的数据
Promise的经典调用格式
.then和.catch的用法——>.then和.catch是一个整体
pending(待定,将要发生的)是默认状态
当p1的状态从pendign——>resolve(解决了,承诺实现了)时,就会执行.then中的内容
当p1的状态从pendign——>reject(拒绝,失败)时,就会执行.catch中的内容
resolve——>.then
输出:
当然,我们也可以使用一个异步的代码
输出:
resolve——>.catch
输出:
Promise的链式调用格式
首先,要清除.then的返回值是什么
输出:
由结果可以看出,返回值是一个全新的对象,并且结果是成功的
为什么是成功的呢?
因为.then的回调中并没有写返回值,就相当于返回了一个undefind
所以不写返回值结果也是成功的
p2中obj的值是p1回调中的resolve中的值
p2的promiseState,promiseValue是如何决定的
输出:
(1) 如果 返回值val不是promise,则p2的promiseState===成功,promiseValue === val
(2)如果返回值val是promise对象,则p2的promiseState===Promise对象状态,promiseValue ===promise对象的val
链式调用
输出:
继续调用会是什么结果呢?
输出:
又是一个全新的promise对象
化简一下写法
通过promise解决回调地狱问题
什么是回调地狱:
例如:
解决完以后的代码:
使用链式结构代替了嵌套关系