promise的意义和应用场景

本文详细介绍了JavaScript中Promise的概念及其如何解决异步编程中的问题。包括Promise的基本语法、三种状态、then和catch方法的应用,以及all和race等高级用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.promise存在的意义

首先我们要知道,js代码执行的过程中,分为同步和异步执行。

同步执行的代码是从上往下、从左往右进行执行的。只有上一句执行完了,才会继续执行上一句代码,异步执行的代码则可以与其他代码同步执行,互不影响,不严格按照顺序执行,而异步执行最明显的问题就是我们不知道异步代码什么时候结束。如果我们多个异步执行代码之间存在依赖关系,就会造成嵌套,这对我们阅读代码是非常不利的,es6新增了promise类,就能很好的解决这种问题。

2.promise基本语法

一、promise初始化

通过 new Promise()构造promise的实例对象,参数是一个回调函数,而回调函数也有两个参数,分别为resolve、reject,这两个参数也是两个函数。

二、promise的三种状态

promise有三种状态,分别为:

1 pending 待定状态,创建一个实例对象之后 初始化时候promise就是一个待定状态

2 fulfilled 成功状态,当我们调用resolve之后就属于成功状态,触发then回调函数

3 rejected 失败状态 ,当我们调用reject之后就属于失败态,触发catch 回调函数

一个promise的状态,只能从待定状态转为成功或者失败状态(当触发reslove函数时转为成功状态,当触发reject函数时转为失败状态),不能逆向转换,成功和失败状态也是不可相互转换的。且一旦发生改变就能再变,也就是说promise的对象的状态不受外界影响,一旦从pending转为fulfilled或rejected,promise的状态就会凝固,再任何时候都可以获取到结果。

三、promise的then和all方法

1.then()

then()方法在reslove函数触发后进行使用,返回值是,第一个异步函数执行完的结果,可以一直.then()下去链式调用。

2.catch()

catch()方法在reject()函数触发后进行调用,返回值是抛出的错误原因。

3.all()

all()方法的参数是一个数组,数组的每一个元素都是promise的实例对象,当每一个promise对象都是成功状态的时候,才会触发 all()的then()函数,只要有一个不成功就触发all()的catch()函数

例如:

var p = Promise.all([p1,p2,p3,p4])

p.then(res=>{

    console.log(res,"+++++++++++") //res 就是每一个promise对象resolve的数据 是一个数组结构

}).catch(res=>{

    console.log(res,"-----------")

})

rach()

rach() 比较多个promise对象,看看谁先进入状态,也就是谁先调用了resovle/reject函数,如果reject先触发,race之后的promise调用catch函数,如果是resolve先触发了,race之后的promise调用then回调函数

rach()的参数是是一个数组,例如:

 Promise.race([cook(),drink()]).then(res=>{   }).catch(res=>{ })

Promise的其他API

 Promise.reject("设置promise为失败状态").catch(err=>console.log(err))

  Promise.resolve("设置promise为失败状态").then(res=>console.log(res))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值