Promise 和 async awite

本文深入探讨了Promise的原理和使用,强调执行器函数内部必须包含异步逻辑并确保Promise状态与之相关联。同时,阐述了then回调中通常需要返回Promise并与异步操作绑定。此外,详细解释了async函数的特性和行为,以及如何通过catch处理外部异常。最后,通过示例展示了async函数的嵌套使用,强调了await等待Promise的重要性。
摘要由CSDN通过智能技术生成

最佳实践:

执行器函数内部一定要有异步逻辑  而且我们得让执行器决定的那个promise的状态与当前的异步逻辑挂钩!

then对应的回调中 一般都是要返回promise的! 这个promise一般也会和一个异步逻辑挂钩!

一定要让await等一个promise!!!!!!

1. 

    promise本质上是一个构造函数(其构造出来的实例是一个状态机;具备三个状态:初始化 成功 失败)

    promise是用来解决回调地狱的(为异步编程提供更优质的解决方案)

2. 

    promise的第一个参数 我们称为执行器!  执行器是一个同步的回调函数!!!

    执行器的执行过程! 决定了返回的promise的状态!

    执行器的返回值会被忽略

3.

    var p = new Promise((resolve, reject)=>{
        //拿setTimeout模拟ajax请求
        setTimeout((flag)=>{
            if(flag){
                //异步操作成功
                resolve()
            }else {
                //异步操作失败
                reject()
            }
        },1000,true)
    });

        执行器的执行过程! 决定了返回的promise的状态!

            如果执行器什么操作都没有做 则返回初始化状态的promise 该promise持有的值是undefined

            如果执行器的第一个参数resolve被调用 则返回成功状态的promise 该promise持有的值是resolve的第一个参数

            如果执行器的第二个参数reject被调用 则返回失败状态的promise 该promise持有的值是reject的第一个参数

            如果执行器在执行时出错! 则返回失败状态的promise 该promise持有的值是失败原因(错误对象)

        一个promise实例状态只能改变一次!! 所以promise都是一次性的!!!

         正常情况下  then方法先调用,p的状态再确定。

4.then

    var p = new Promise((resolve, reject)=>{
        //第一次请求
        setTimeout((flag)=>{
            if(flag){
                console.log("获取1号视频成功")
                resolve(1)
            }
        },1000,true)
    });

    then的回调返回了一个值,那么then返回的Promise将会成为成功状态,并且将返回的值作为自己持有的值

    then的回调抛出一个错误,那么then返回的Promise将会成为拒绝状态,并且将抛出的错误作为自己持有的值

    then的回调返回什么样的promise,那么then返回的Promise将会成为对应的promise

5.解决外部异常

非promise:try{}catch(err){}

promise:catch{}

6.async

    async函数返回了一个值,那么async函数返回的Promise将会成为成功状态,并且将返回的值作为自己持有的值

    async函数抛出一个错误,那么async函数返回的Promise将会成为拒绝状态,并且将抛出的错误作为自己持有的值

    async函数返回什么样的promise,那么返回的Promise将会成为对应的promise

7.async函数的嵌套

    async function a() {
        await new Promise((resolve, reject)=>{
            setTimeout(()=>{
                console.log("a-1");
                resolve()
            },1000)
        })

        await new Promise((resolve, reject)=>{
            setTimeout(()=>{
                console.log("a-2");
                resolve()
            },1000)
        })

        await new Promise((resolve, reject)=>{
            setTimeout(()=>{
                console.log("a-3");
                resolve()
            },1000)
        })
    }

    (async ()=>{
        await a()
        console.log("a-4")
    })()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值