前端女娲补天 JavaScript(一) 什么是Promise,还有其他什么异步解决方案

什么是Promise

异步的最早解决方案是回调,如setTimeout。但回调函数嵌套很容易造成回调地狱的问题,于是ES6中推出了Promise,通过then方法链式调用解决了回调地狱。
Promise有三种状态,pending,fulfilled,rejected,一旦状态发生改变,就不会再变。虽然Promise是用来解决异步问题,但是Promise内部的执行器是同步执行的。
Promise原型链上的方法:
Promise.prototype.catch
Promise.prototype.then

Promise方法:
Promise.resolve
Promise.reject
Promise.all
Promise.race

Promise的缺点:
一旦开始就无法中断。
处于pending状态不会知道正在进行哪一步。

异步方案之一:Generator

Generator也是一种实现异步的解决方案,通过function *声明。
Generator函数会返回一个迭代器,迭代器拥有next函数。
与Promise不同的是,Generator可以实现中断。Generator通过yield语句设置断点,yield后面会跟一个值,作为返回对象的value值,也就是当前状态。Generator返回的迭代器通过调用next方法执行代码,遇到yield语句就中断。这样同样实现了异步调用。

异步方案之二:async,await

async,await也是新的一种异步的解决方案。async是Generator的语法糖,相对于是将function 替换为async,将yield替换为await。
相对于Generator,async自动执行,输出最后结果,不需要调用next。
await后面一般是promise对象,返回的是promise的成功值。如果是失败或出错的promise,需要await外面进行try catch捕获,返回错误值。如果后面跟普通数据,返回此数据。
async会返回promise对象,普通返回结果也会变成promise对象返回,状态为fulfilled。如果抛出异常,则会返回状态为rejected的失败的promise对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值