Promise及其应用

Promise是JavaScript中用于解决异步编程问题的机制,它有pending、fulfilled和rejected三种状态。Promise对象允许通过链式调用.then和.catch来组织异步操作,使得代码更易读和维护。async函数用来声明异步操作,await则用于在异步函数内部等待Promise结果。
摘要由CSDN通过智能技术生成

一.什么是promise

Promise是异步编程的一种解决方案,原型有.the()、.catch()等方法,改善了传统回调造成的代码难维护,控制反转等问题。

promise的状态

promise有三种状态:分别是pending、fullfilled、rejected,

1.pending
初始状态(可以改变),在resolve和reject之前,都是处于这个状态
resolve -> fulfilled
reject -> rejected
2.fulfilled
最终态,不可改变
一个promise 被resolve之后变成这个状态
必须拥有一个value值
3.rejected
最终态,不可改变
一个promise 被reject之后变成这个状态
必须拥有一个reason值


二.promise的作用与用法

作用:Promise对象可以理解为一次执行的异步操作,使用promise对象之后可以使用一种链式调用的方式来组织代码;让代码更加的直观。也就是说,有了Promise对象,就可以将异步操作以同步的操作的流程表达出来,避免了层层嵌套的回调函数。总结一下就是可以将原先不可控的回调通过promise转为更加可控更清晰的方式表达,更加高效,更便于维护。

用法:首先我们new一个Promise,将Promise实例化。然后在实例化的promise可以传两个参数,一个是成功之后的resolve,一个是失败之后的reject。

const promise = new Promise(function (resolve, reject) {
	if (/*异步操作成功*/) {
		resolve(value);
	} else {
		reject(error);
	}
});

关于.then和.catch方法下面有具体的代码演示

.then方法

let p1 = new Promise((resolve, reject) => {
        setTime(() => {
          resolve("ok");
        }, 2000);
      });
      console.log("p1",p1);
      let p2 = p1.then((value)=>{
        console.log("p1",p1,value);
        return value.toUpperCase();
      })
      console.log("p2",p2);
      let p3 = p2.then((value)=>{
        console.log("p2",p2,value);
      })
      console.log("p3",p3);
//p1 Promise { <pending> }
//p2 Promise { <pending> }
//p3 Promise { <pending> }
//p1 Promise { 'ok' } ok
//p2 Promise { 'ok' } OK

.catch方法

      var p1 = new Promise((res, rej) => {
        setTimeout(() => {
          res("p1");
        }, 1000);
      });
 
      var p2 = new Promise((res, rej) => {
        setTimeout(() => {
          res("p2");
        }, 2000);
      });
 
      //   rej(new Error("p2 Error"));
 
      var p3 = new Promise((res, rej) => {
        setTimeout(() => {
          res("p3");
        }, 3000);
      });
 
      Promise.all([p3, p2, p1])
        .then((r) => {
          console.log(r);
        })
        .catch((err) => console.log(err.message));

三.async/await的作用与用法

3.1 关于async

async是"异步"的简写,可作用于异步声明的函数

 async function timeout() {
     return 'hello world!'
 }//声明该函数为异步

3.2关于await

只能放在async定义的函数内。可以理解为等待。

await 修饰的如果是Promise对象:可以获取Promise中返回的内容(resolve或reject的参数),且取到值后语句才会往下执行;

如果不是Promise对象:把这个非promise的东西当做await表达式的结果。

async function fun(){
    let a = await 1;
    let b = await new Promise((resolve,reject)=>{
        setTimeout(function(){
            resolve('P')
        },3000)
    })
    let c = await function(){
        return 'y'
    }()
    console.log(a,b,c)
}
fun(); // 3秒后输出: 1 "P" "y"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值