Promise

本文详细介绍了Promise的基本概念和使用,包括它的三种状态(pending、fulfilled、rejected)及其转换。通过实例展示了如何进行异步操作的封装,以及如何通过.then()和.catch()处理成功和失败的情况。此外,还讲解了Promise的链式调用和Promise.all()的用法,演示了如何同时处理多个异步任务。最后,讨论了如何在遇到错误时优雅地处理和传递错误。
摘要由CSDN通过智能技术生成

Promise

1.基本了解

在执行异步操作时,需要promise对这个异步操作进行封装。
new Promise((resolve,reject)=>{}) ,其中resolve和reject是函数,比如要执行setTimeout这个异步函数时,将要打印的代码的这个步骤放到.then()方法内执行,setTimeout函数内部需要调用resolve函数

new Promise((resolve,reject)=>{
            setTimeout( ()=> {
                resolve('hello world')
            },1000)
        }).then((data)=>{
            console.log(data)
        })

成功时会调用resolve这个函数调用.then()方法,失败时调用reject再调用.catch()方法

new Promise((resolve,reject)=>{
            setTimeout( ()=> {
                //成功时调用resolve
                // resolve('hello world')
                //失败时调用reject
                reject('message err')
            },1000)
        }).then((data)=>{
            console.log(data)
        }).catch((err)=>{
            console.log(err)
        })

2.三种状态

(1)pending:等待,网络正在请求时,或定时器没到时间。
(2)fulfill:满足状态,当主动调用resolve时,就处于该状态,并会回调.then().
(3)reject:拒绝状态,当调用reject时,就处于该状态,并会回调.catch()
但成功和拒绝两种状态可以都放到.then()

new Promise((resolve,reject)=>{
            setTimeout(()=>{
                // resolve('hello world')
                reject('message err')
            },1000)
        }).then((data)=>{
            console.log(data)
        },(err)=>{
            console.log(err)
        })
3.Promise的链式调用
//链式处理
        new Promise((resolve,reject)=>{
            setTimeout(()=>{
                resolve('aaa')
            },1000)
        }).then((res)=>{
            console.log(res,'第一层处理的代码')

			//可以在这里不用再填完整的new Promise
			//直接调用Promise的resolve方法
            return Promise.resolve(res+'111')
            
        }).then(res=>{
            console.log(res,'第二层处理的代码')

            return Promise.resolve(res+'222')
        }).then(res=>{
            console.log(res,'第三层处理的代码')
        })

更简洁的方法:
原来是return Promise.resolve(res+'111')可以改为:return res+'111'

4.Promise.all

如果需要发送两次请求才能执行下一步,可以用到promise.all
这两个异步都执行完后才会打印最后的结果

Promise.all([
            new Promise((resolve,reject)=>{
                setTimeout(()=>{
                    resolve('res1')
                },2000)
            }),
            new Promise((resolve,reject)=>{
                setTimeout(()=>{
                    resolve('res2')
                },1000)
            })
        ]).then(results=>{
            console.log(results)
        })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值