javaWeb Promise

一、普通函数和回调函数

普通函数: 正常调用的函数,一般函数执行完毕后才会继续执行下一行代码

回调函数: 一些特殊的函数,表示未来才会执行的一些功能,后续代码不会等待该函数执行完毕就开始执行了

二、Promise 简介

前端中的异步编程技术,类似Java中的多线程+线程结果回调

Promise 是异步编程的一种解决方案,比传统的解决方案(回调函数和事件)更合理和更强大。它由社区最早提出和实现,ES6将其写进了语言标准,统一了用法,原生提供了`Promise`对象。

所谓`Promise`,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。

Promise对象有以下两个特点。

    (1)Promise对象代表一个异步操作,有三种状态:`Pending`(进行中)、`Resolved`(已完成,又称 Fulfilled)和`Rejected`(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是`Promise`这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。

   

    (2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从`Pending`变为`Resolved`和从`Pending`变为`Rejected`。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。

三、promise实例与具体介绍

(1)简单的promise实例

    <script>

       

       /*  

        1.实例化promise对象,并且执行(类似Java创建线程对象,并且start)

        参数: resolve,reject随意命名,但是一般建议保留通常叫法

        参数: resolve,reject分别处理成功和失败的两个函数! 成功:resolve

失败:reject

        参数: 在function中调用这里两个方法,那么promise会处于两个不同的状态

        状态: promise有三个状态

                pending   正在运行

                resolved  内部调用了resolve方法

                rejected  内部调用了reject方法

        参数: 在第二步回调函数中就可以获取对应的结果

        */

        let promise =new Promise(function(resolve,reject){

            console.log("promise do some code ... ...")

            //resolve("promise success")

            reject("promise fail")

        })

        console.log('other code1111 invoked')

        //2.获取回调函数结果  then在这里会等待promise中的运行结果,但是不会阻塞代码继续运行

        promise.then(

            function(value){console.log(`promise中执行了resolve:${value}`)},

            function(error){console.log(`promise中执行了reject:${error}`)}

        )

        // 3 其他代码执行  不等待前方的代码执行完毕

        console.log('other code2222 invoked')

    </script>

 

 (2)Promise catch()

 `Promise.prototype.catch`方法是`.then(null, rejection)`的别名,用于指定发生错误时的回调函数。

```html

<script>

    let promise =new Promise(function(resolve,reject){

        console.log("promise do some code ... ...")

        // 故意响应一个异常对象

        throw new Error("error message")

    })

    console.log('other code1111 invoked')

    /*

        then中的reject()的对应方法可以在产生异常时执行,接收到的就是异常中的提示信息

        then中可以只留一个resolve()的对应方法,reject()方法可以用后续的catch替换

        then中的reject对应的回调函数被后续的catch替换后,catch中接收的数据是一个异常对象

        */

    promise.then(

        function(resolveValue){

console.log(`promise中执行了resolve:${resolveValue}`)}

        //function(rejectValue){console.log(`promise中执行了reject:${rejectValue}`)}

    ).catch(

        function(error){console.log(error)}

    )

    console.log('other code2222 invoked')

</script>

 

 

(3)Async

async和await是ES6中用于处理异步操作的新特性。通常,异步操作会涉及到Promise对象,而async/await则是在Promise基础上提供了更加直观和易于使用的语法。

>  async 用于标识函数的

1. async标识函数后,async函数的返回值会变成一个promise对象

2. 如果函数内部返回的数据是一个非promise对象,async函数的结果会返回一个成功状态 promise对象

3. 如果函数内部返回的是一个promise对象,则async函数返回的状态与结果由该对象决定

4. 如果函数内部抛出的是一个异常,则async函数返回的是一个失败的promise对象

 

 

(4)await

> await

帮助获取promise成功状态的返回值

1. await右侧的表达式一般为一个promise对象,但是也可以是一个其他值

2. 如果表达式是promise对象,await返回的是promise成功的值

3. await会等右边的promise对象执行结束,然后再获取结果,后续代码也会等待await的执行(但是await所在函数之外的代码不会等待await的执行)

4. 如果表达式是其他值,则直接返回该值

5. await必须在async函数中,但是async函数中可以没有await

6. 如果await右边的promise失败了,就会抛出异常,需要通过 try ... catch捕获处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值