2.①Promise回调地狱②链式调用③中断promise链④catch错误穿透⑤升级版ES7async(异步)和await(异步等待成功结果)

目录

一:Promise相关

1.Promise的链式调用

               (1)如果then所指定的回调返回的是非Promise值为a:

               (2)如果then所指定的回调返回的是一个Promise实例p:

               (3)如果then所指定的回调抛出异常:

2.演示回调地狱

3.Promise的链式调用解决回调地狱

4.中断promise链的方法(返回一个状态为初始化pending状态的Promise实例)

5.catch错误穿透

二:ES7新增async(异步)和await(异步等待成功结果)更好的解决回调地狱

        3. 注意:

三:举例Promise事件循环面试题:


一:Promise相关

1.Promise的链式调用

Promise实例.then()返回的是一个【新的Promise实例】,它的值和状态由什么决定?

  •        简单表达: 由then()所指定的回调函数执行的结果决定
  •        详细表达:

               (1)如果then所指定的回调返回的是非Promise值为a:

                                            那么【新Promise实例】状态为:成功(fulfilled), 成功的value为a

               (2)如果then所指定的回调返回的是一个Promise实例p:

                                            那么【新Promise实例】的状态、值,都与p一致

                                           

               (3)如果then所指定的回调抛出异常:

                                            那么【新Promise实例】状态为rejected失败, reason为抛出的那个异常

2.演示回调地狱

请求1成功后执行请求2,,,

3.Promise的链式调用解决回调地狱

4.中断promise链的方法(返回一个状态为初始化pending状态的Promise实例)

5.catch错误穿透

二:ES7新增async(异步)和await(异步等待成功结果)更好的解决回调地狱

        1. async修饰的函数

                    函数的返回值为promise对象

                    Promise实例的结果由async函数执行的返回值决定

        2. await表达式

                    await右侧的表达式一般为Promise实例对象, 但也可以是其它的值

                    (1).如果表达式是Promise实例对象, await后的返回值是promise成功的值

                    (2).如果表达式是其它值, 直接将此值作为await的返回值

        3. 注意:

                await必须写在async函数中, 但async函数中可以没有await

                如果await的Promise实例对象失败了, 就会抛出异常, 后面代码不会进行,需要通过try...catch来捕获处理

    <script>
        let p1 = new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('我成功了')
            }, 1000)
        })
        let p2 = new Promise((resolve, reject) => {
            setTimeout(() => {
                reject('我失败了')
            }, 3000)
        })
        let p3 = new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('我成功了')
            }, 5000)
        })
            ; (async () => {
                try {
                    const result1 = await p1
                    console.log(result1)
                    const result2 = await p2
                    console.log(result2)
                    const result3 = await p3
                    console.log(result3)
                } catch (error) {
                    console.log(`输出:' ${error} '的实例错了,到此结束了,后面不会再输出了`)
                }

            })()
        // 两个括号是立即执行函数,不用额外调用
        console.log('hi,我是同步的')
    </script>

三:举例Promise事件循环面试题:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值