es6中promise 链式调用理解总结

本文深入探讨es6中的Promise链式调用,包括构造函数、then方法以及async/await的使用。着重分析了Promise在构造时的状态设定,then方法如何返回新的Promise并根据返回值确定状态,以及then内部事件的执行顺序。同时介绍了async函数返回Promise和await关键字如何简化异步处理。

理解es6中promise链式调用

promise状态,value不谈了,主要研究链式调用(then)

constructor

立即执行,参数resolve,reject决定promise对象状态和value

//原生promise示例
let p = new Promise((resolve,reject) => {
    resolve(1)
})

then

总体特性:

  1. 返回一个promise对象,所以可以链式调用
  2. 如果 return new Promise() 返回一个promise对象,则要等该promise对象最终成功或失败才改变返回的promise状态
  3. 如果return '非promise对象‘ 则直接返回成功态的一个promise

调用then时发生了什么:

立即返回一个promise(pending),then中return 的值决定新返回的promise的状态:
非promise:成功
promise:状态与该promise一致
抛出异常:失败

事件执行顺序:如果状态为pending的promise调用then,则在promise的注册列表中加入事件等待执行,否则(成功或失败状态)直接执行事件(这里的事件做了什么:将then的方法参数塞入微任务队列)

//原生promise示例
let p = new Promise((resolve,reject) => {
  resolve(1)
}).then(function (res){
console.log(res)
return 2
}).then((res) => {
console.log(res)
return new Promise((resolve) => {
  resolve(3)
})
}).then((res) => {
console.log(res)
})

async await

特点:
async函数会返回一个promise对象,await相当于then

//试一试
const myPromise = Promise.resolve(Promise.resolve("A"));
function func1() {
  myPromise.then((res) => res).then((res) => console.log(res));
  setTimeout(() => console.log("B"), 0);
  console.log("C");
}

async function func2() {
  const res = await myPromise;
  console.log(await res);
  setTimeout(() => console.log("D"), 0);
  console.log("E");
}
func1();
func2();
//试一试
new Promise((resolve, reject) => {
  resolve("p1");

  new Promise((resolve, reject) => {
    resolve("p2");
  }).then((data) => {
    console.log(data);
  });

  new Promise((resolve, reject) => {
    resolve("p3");
  }).then((data) => {
    console.log(data);
  });
}).then((data) => {
  console.log(data);
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值