JavaScript进阶--Promise篇

本文详细介绍了JavaScript中的Promise,包括其状态转换、成功与失败处理、链式调用、处理多个异步操作(Promise.all()和Promise.race())以及其在避免回调地狱和提高代码可读性方面的优势。
摘要由CSDN通过智能技术生成

Promise 是 JavaScript 中用于处理异步操作的一种解决方案,它提供了更优雅、更强大的方式来管理异步操作,避免了传统的回调地狱(callback hell)问题。Promise 是一个代表未来承诺的对象,可以是异步操作的结果或错误。

以下是 Promise 的一些关键特点和功能:

1. 状态:

  • Promise 对象有三种状态:Pending(等待态)、Fulfilled(成功态)和 Rejected(失败态),Promise 有且只能有一种状态,且不可逆,可以理解为一个岔路口,pending就是这个路口,Fulfilled和Rejected就是两条不归路,一但上了路就不能回头了。
  • 当一个 Promise 对象被创建时,它处于 Pending 状态,表示异步操作尚未完成。
  • 当异步操作成功完成时,Promise 进入 Fulfilled 状态,并返回成功的结果。
  • 当异步操作失败时,Promise 进入 Rejected 状态,并返回失败的原因。

2. 成功和失败处理:

  • 使用 then() 方法处理 Promise 的成功状态,可以获取成功的结果。
  • 使用 catch() 方法处理 Promise 的失败状态,可以捕获失败的原因。

3. 链式调用:

  • Promise 可以链式调用,通过 then() 方法连续处理多个异步操作,使代码更清晰和易于理解。
    let promise1 = new Promise((resolve,reject)=>{
        //异步操作(比如Ajax请求)
        setTimeout(()=>{
            let num = Math.random()
            
            if(num>0.5){
                resolve(num)
            }else{
                
                reject(num)
            }
            
        },2000)
    
    })
    
    promise1.then((res)=>{
        console.log(res)//大于0.5的时候回返回到这里
        return res //返回一个值给下一个then使用
    }).then((res)=>{
        console.log(res*2)//大于0.5的时候返回乘以2的值
    }).catch((err)=>{
        console.log(err)//小于0.5的时候会到这里
    })

4. 处理多个异步操作:

  • 使用 Promise.all() 可以同时处理多个 Promise 对象,等待它们全部完成后返回结果。
    all()方法的规则是多个处理对象都为正确的时候会返回一个正确的结果数组,如果有一个错误则会返回错误的那个结果,但是所有的promise还是会运行,如果有一个错误了并不影响其他的运行结果。只是最后的结果是按照错误的来。
  • let promise1 = new Promise((resolve,reject)=>{
        //异步操作(比如Ajax请求)
        setTimeout(()=>{
            let num = Math.random()
            console.log(num)
            if(num>0.5){
                resolve(num)
            }else{
                
                reject(num)
            }
            
        },200)
    
    })
    
    let promise2 = new Promise((resolve,reject)=>{
        //异步操作(比如Ajax请求)
        setTimeout(()=>{
            let num = Math.random()+1
            console.log(num)
            
            if(num>1.5){
                resolve(num)
            }else{
                
                reject(num)
            }
            
        },200)
    
    })
    
    let promise = Promise.all([promise1,promise2])
    
    promise.then((res)=>{
        console.log(res)//大于0.5的时候回返回到这里
        return res //返回一个值给下一个then使用
    }).catch((err)=>{
        console.log(err)//小于0.5的时候会到这里
    })

  • 使用 Promise.race() 可以处理多个 Promise 对象,返回最先解决或拒绝的结果。谁先返回结果就返回谁

5. 优势:

  • 避免了回调地狱,使代码更具可读性和可维护性。
  • 提供了更灵活的方式来处理异步操作,使得异步代码更容易编写和理解。
  • 使异步操作的状态明确可控,便于处理和管理异步任务。
  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值