async/await和Promise(resolve与reject)

promise是什么?

  • 1、主要用于异步计算
  • 2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果
  • 3、可以在对象之间传递和操作promise,帮助我们处理队列

为什么会有promise?

为了避免界面冻结(任务)

  • 同步:假设你去了一家饭店,找个位置,叫来服务员,这个时候服务员对你说,对不起我是“同步”服务员,我要服务完这张桌子才能招呼你。那桌客人明明已经吃上了,你只是想要个菜单,这么小的动作,服务员却要你等到别人的一个大动作完成之后,才能再来招呼你,这个便是同步的问题:也就是“顺序交付的工作1234,必须按照1234的顺序完成”。
  • 异步:则是将耗时很长的A交付的工作交给系统之后,就去继续做B交付的工作,。等到系统完成了前面的工作之后,再通过回调或者事件,继续做A剩下的工作。AB工作的完成顺序,和交付他们的时间顺序无关,所以叫“异步”。

promise(resolve与reject)

Promise对象,用来表示一个延迟操作(通常是异步操作)的结果(完成或失败)。

一个Promise对象,在任意时刻,都处于下面三个独立状态中的一个:

  • 1、处于完成Resolved状态,会立刻调用完成状态的函数f。
  • 2、处于失败Rejected状态,会立刻调用失败状态的函数r。
  • 3、处于进行Pending状态,表示延迟(异步)操作正在进行中。

Promise构造函数接受一个函数作为参数,该函数有两个参数,分别是resolve和reject,resolve和reject本身也是函数。

  • 当调用resolve函数时,Promise对象的状态从Pending变成Resolved。
  • 当调用reject函数时,Promise对象的状态从Pending变成Rejected。

resolve函数的作用是,将Promise对象的状态从Pending变成Resolved,在异步操作成功时手工调用,并将异步操作的结果作为参数传递出去。

reject函数的作用是,将Promise对象的状态从Pending变成Rejected,在异步操作失败时手工调用(如果异常发生并没有捕获,则会隐式调用),并将异步操作报出的错误作为参数传递出去。

async、await

简洁:异步编程的最高境界就是不关心它是否是异步。async、await很好的解决了这一点,将异步强行转换为同步处理。
async/await与promise不存在谁代替谁的说法,因为async/await是寄生于Promise,Generater的语法糖。

用法
async用于申明一个function是异步的,而await可以认为是async wait的简写,等待一个异步方法执行完成。
规则:
1 async和await是配对使用的,await存在于async的内部。否则会报错
2 await表示在这里等待一个promise返回,再接下来执行
3 await后面跟着的应该是一个promise对象,(也可以不是,如果不是接下来也没什么意义了…)

写法:

`async function demo() {
let result01 = await sleep(100);
//上一个await执行之后才会执行下一句
let result02 = await sleep(result01 + 100);
let result03 = await sleep(result02 + 100);
// console.log(result03);
return result03;
}

promise和async/await区别

  • 1 promise是ES6,async/await是ES7

  • 2 async/await相对于promise来讲,写法更加优雅

  • 3 reject状态:

    1)promise错误可以通过catch来捕捉,建议尾部捕获错误,
    2)async/await既可以用.then又可以用try-catch捕捉

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值