Promise异步请求/async-await

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

Promise异步请求/async-await_第1张图片

Promise

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

Promise异步请求/async-await_第2张图片

创建

通过 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来优化回调地狱。

问题解决:

Promise异步请求/async-await_第3张图片

->  .then(onResolver())

参考:

promise解决回调地狱 - 简书

Promise - 掘金

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

JS红宝书

Promise - JavaScript | MDN

你可能感兴趣的:(项目中认识vue,vue学习,前端,javascript,开发语言)