Promise异步请求/async-await

问题:调接口时,非以往的函数异步请求去调接口。而是用到了Promise中.then方法

Promise

Promise是一种用于处理异步操作的对象。它代表了一个尚未完成但预计会未来完成的操作,并提供了一种结构化的方式来处理操作的结果。它起到代理作用(proxy),充当异步操作与回调函数之间的中介,使得异步操作具备同步操作的接口,而不必一层层地嵌套回调函数。.

创建

通过 new Promise(res, rej) 来创建一个Promise对象。res和rej是两个可以调用的函数,用于处理异步操作结果。

var p1 = new Promise(function(resolve,reject){
     //异步操作 resolve(obj1)  或者 reject(obj2)
});
p1.then(function(rs){
    // 如果p1的状态是resolved,则then中的函数
    //会执行,且obj1的值会传给rs
}).catch(function(rs){
    // 如果p1的状态是reject,则catch中的函数
    //    会执行,且obj2的值会传给rs
}).finally(function(){
    // 一定会执行的函数
})
状态

Promise有三种状态:pending(待定)、fulfilled(成功)和rejected(失败)。

待定(pending)是期约的初始状态。当异步操作完成后,Promise可以转为fulfilled或rejected,二者又被称为落定状态,一旦转换 过程不可逆,即 落定后 期约状态不再改变。

处理结果

.then() 方法 来处理Promise的成功/失败结果

.catch() 方法 处理Promise失败状态(rejected)

.finally()方法 可以在Promise无论成功或失败后,都执行的操作。

注:想要用.then传递参数,直接return返回参数即可,若没返回则为undefined

Promise.all()

接收一个Promise数组为参数,并返回一个新的Promise对象。当所有都解决时,才返回解决值;若有一个拒绝,新的Promise将被拒绝,并返回拒绝原因

.then()

p.then(函数1[,函数2])

第一个参数是resolved状态回调函数,第二个是rejected状态的回调函数

注:当promise状态为rejected时,但并未设置第二个参数,则会抛出一个错误,提示是Uncaught(in promise)

async-await的语法

async,await是es7中新增的语法,用来改进异步代码写法,是promise升级版

  1. async函数返回一个promise对象
  2. async函数内部return语句返回的值是promise对象的值
await命令
  1. await的外层函数必须有一个async
  2. 正常情况下,await命令后面是一个promise对象,返回该promise的值。如果不是promise对象就直接返回对应的值

可以使用async-await来优化回调地狱。

问题解决:

->  .then(onResolver())

参考:

promise解决回调地狱 - 简书

Promise - 掘金

https://www.cnblogs.com/zjdxr-up/p/17042819.html

JS红宝书

Promise - JavaScript | MDN

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值