《深入理解ES6》——Promise异步编程

青旅半醒 2022-05-09 12:03 365阅读 0赞

Promise的生命周期

  1. 每个promise都会经历一个短暂的生命周期:先是处于进行中(pending)的状态,此时操作尚未完成,所以它也是未处理(unsettled)的;一旦异步操作执行结束,Promise则变为已处理(settled)的状态。已处理的状态又分为以下两种:
  • Fulfilled Promise异步操作成功完成
  • Rejected 由于程序错误或其他一些原因,Promise异步操作未能成功完成。

then()方法

  1. 所有Promise都有then()方法,它接受两个参数:第一个是当Promise的状态变为fulfilled时要调用的函数,与异步操作相关的附加数据都会传递给这个完成函数;第二个是当Promise的状态变为rejected时要调用的函数,其与完成时调用的函数类似,所有与失败状态相关的附加数据都会传递给这个拒绝函数。
  2. then()的两个参数都是可选的,可以按照任意组合的方式来监听Promise,执行完成或被拒绝都会被响应。来看下面实例:
  3. let promise = readFile("example.txt");
  4. promise.then(function(contents){
  5. //完成
  6. console.log(contents);
  7. },function(err){
  8. //拒绝
  9. console.error(err.message);
  10. });
  11. promise.then(function(contents){
  12. //完成
  13. console.log(contents);
  14. });
  15. promise.then(null,function(err){
  16. //拒绝
  17. console.error(err.message);
  18. });
  19. 上面这3then()调用操作的是同一个Promise。第一个同时监听了执行完成和执行被拒;第二个只监听了执行完成,错误时不报告;第三个只监听了执行被拒,成功时不报告。
  20. Promise还有一个catch()方法,相当于只传入拒绝处理程序的then()方法。如下,catch()方法和then()方法实现的功能是等价的:
  21. promise.catch(function(err){
  22. //拒绝
  23. console.error(err.message);
  24. });
  25. //与以下调用相同
  26. promise.then(null,function(err){
  27. //拒绝
  28. console.error(err.message);
  29. });

发表评论

表情:
评论列表 (有 0 条评论,365人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ES6语法之:异步Promise

    首先,为什么要使用异步? 我在[一篇文章][Link 1]中看到这样的说法: > 在JavaScript的世界中,所有代码都是单线程执行的。由于这个“缺陷”,导致Jav

    相关 ES6-Promise

    Promise what? 在我看来Promise就相当于一个承诺容器,将所要执行的事件存贮在promise容器中。 Promise在ES6中被统一规范,由浏览