关于es6中Promise的用法

什么是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构造器

格式

image.png

  输出:   

image.png

image.png

 输出:

image.png

image.png

输出:

image.png

总结: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

image.png

输出:

image.png

当然,我们也可以使用一个异步的代码

image.png

输出:

image.png

resolve——>.catch

image.png

输出:

image.png

Promise的链式调用格式

首先,要清除.then的返回值是什么

image.png

输出:

image.png

由结果可以看出,返回值是一个全新的对象,并且结果是成功的

image.png

为什么是成功的呢?

因为.then的回调中并没有写返回值,就相当于返回了一个undefind

image.png

所以不写返回值结果也是成功的

p2中obj的值是p1回调中的resolve中的值

image.png

p2的promiseState,promiseValue是如何决定的

image.png

输出: 

(1) 如果 返回值val不是promise,则p2的promiseState===成功,promiseValue === val

(2)如果返回值val是promise对象,则p2的promiseState===Promise对象状态,promiseValue ===promise对象的val

链式调用

image.png

    输出:

image.png

继续调用会是什么结果呢?

image.png

 输出:

image.png

又是一个全新的promise对象

化简一下写法

image.png

通过promise解决回调地狱问题

什么是回调地狱:

例如:

image.png

解决完以后的代码:

使用链式结构代替了嵌套关系

    

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值