异步:promise、then、async、await、try、catch及区别

本文介绍了同步和异步的概念,重点解析了Promise的工作原理,包括pending、resolve、reject和all、race状态。讨论了then方法的两种参数及其返回值的几种情况,并展示了如何使用Promise改进异步操作。此外,文章还探讨了Async函数和await关键字如何简化Promise的使用,以及它们与try/catch结合处理错误的优势。最后,对比了Promise与async/await的优缺点。

同步和异步

        同步和异步是一种消息通知机制

        同步阻塞: A调用B,B处理获得结果,才返回给A。A在这个过程中,一直等待B的处理结果,没有拿到结果之前,需要A(调用者)一直

        等待和确认调用结果是否返回,拿到结果,然后继续往下执行。

                做一件事,没有拿到结果之前,就一直在这等着,一直等到有结果了,再去做下边的事。

        异步非阻塞: A调用B,无需等待B的结果,B通过状态,通知等来通知A或回调函数来处理。

                做一件事,不用等待事情的结果,然后就去忙别的了,有了结果,再通过状态来告诉我,或者通过回调函数来处理。


promise

        let new = new Promise((resolve,reject)=>{resove("value")});

        ES6的Promise对象是一个构造函数,用来生成Promise实例。

        所谓Promise对象,就是代表了未来某个将要发生的事件(通常是一个异步操作)。

        它的好处在于,有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数


Promise对象的三种状态 pending 、resolve、reject和all、race

        resolve(接受) 

        reject(拒绝)

        pending(等待) 

        all(一次执行)

        race(速度)


then 方法

        两种参数:then的2个参数;onresolove(成功) 和 onreject(失败);

then的返回值,会返回一个新的 Promise 对象, 但是状态会有几种情况:

        1.then 的回调函数中没有返回值,then就会返回一个状态为: resolved 的 promise 对象

        2.then 的回调函数返回值是 非 promise 的值,then就会返回一个状态为: resolved 的 promise 对象,另外会把返回值,传递给 下一个 then

        3.then 的回调函数返回值是 promise 对象,then 就直接返回这个  promise 对象,具体的状态可以由我们自己定义,具体传递的值,也由

           我们自己定义


通过promise改下请求图片


通过promise改写方块运动

catch拦截


Async 函数 和 await 改造promise


通过async和await改写方块运动


try及catch方法  捕捉错误


promise和async的区别

        promise写法,嵌套太多

        async写法

为什么Async/Await更好?

  1)使用async函数可以让代码简洁很多,不需要像Promise一样需要些then,不需要写匿名函数处理Promise的resolve值,也不需要定义

            多余的data变量,还避免了嵌套代码。

  2)错误处理:Async/Await 让 try/catch 可以同时处理同步和异步错误。在下面的promise示例中,try/catch 不能处理 JSON.parse 的

             错误,因为它在Promise中。我们需要使用 .catch,这样错误处理代码非常冗余。并且,在我们的实际生产代码会更加复杂。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值