ES6中的promise法则

Bertha 。 2022-06-04 04:48 304阅读 0赞

一,promise用来解决什么问题的

Promise
为异步编程提供统一的解决方案,比传统的回调和事件更加合理有效。多重嵌套的回调函数,代码是横向发展,不是纵向发展,容易乱成一团,不便管理,称之为”callback
hell”,回调地狱或回调恶梦。

Promise就是为了解决这个问题而提出的。它不是新的语法功能,而是一种新的写法,允许将回调函数的横向加载,改成纵向加载。

二,promise的基本认识

  1. Promise是一个构造函数,自己身上有all、reject、resolve这几个眼熟的方法,原型上有then、catch等同样很眼熟的方法。
  2. Promise new出来的对象有then、catch方法。
  3. Promise的三个状态:Pending 进行中 / Resolved 已成功 / Rejected 已失败
  4. Promise new()的函数立即执行。
  5. 用Promise的时候一般是包在一个函数中,在需要的时候去运行这个函数。
  6. 执行这个函数我们得到了一个Promise对象。

    var p = new Promise(function(resolve, reject){

    1. //做一些异步操作
    2. setTimeout(function(){
    3. console.log('执行完成'); //立即打印
    4. resolve('随便什么数据');
    5. }, 2000);

    });

    function runAsync(){

    1. var p = new Promise(function(resolve, reject){
    2. //做一些异步操作
    3. setTimeout(function(){
    4. console.log('执行完成');
    5. resolve('随便什么数据');
    6. }, 2000);
    7. });
    8. return p;

    }
    runAsync()

在runAsync()的返回上直接调用then方法,then接收一个参数,是函数,并且会拿到我们在runAsync中调用resolve时传的的参数。运行这段代码,会在2秒后输出“执行完成”,紧接着输出“随便什么数据”。

三,promise的精髓-链式调用

  1. function runAsync1(){
  2. var p = new Promise(function(resolve, reject){
  3. //做一些异步操作
  4. setTimeout(function(){
  5. console.log('异步任务1执行完成');
  6. resolve('随便什么数据1');
  7. }, 1000);
  8. });
  9. return p;
  10. }
  11. function runAsync2(){
  12. var p = new Promise(function(resolve, reject){
  13. //做一些异步操作
  14. setTimeout(function(){
  15. console.log('异步任务2执行完成');
  16. resolve('随便什么数据2');
  17. }, 2000);
  18. });
  19. return p;
  20. }
  21. function runAsync3(){
  22. var p = new Promise(function(resolve, reject){
  23. //做一些异步操作
  24. setTimeout(function(){
  25. console.log('异步任务3执行完成');
  26. resolve('随便什么数据3');
  27. }, 2000);
  28. });
  29. return p;
  30. }

调用:


  1. runAsync1()
  2. .then(function(data){
  3. console.log(data);
  4. return runAsync2();
  5. })
  6. .then(function(data){
  7. console.log(data);
  8. return runAsync3();
  9. })
  10. .then(function(data){
  11. console.log(data);
  12. });

执行结果:

这里写图片描述

**

四,catch的用法捕获rejected状态

**

  1. function getNumber(){
  2. var p = new Promise(function(resolve, reject){
  3. //做一些异步操作
  4. setTimeout(function(){
  5. var num = Math.ceil(Math.random()*10); //生成1-10的随机数
  6. if(num<=5){
  7. resolve(num);
  8. }
  9. else{
  10. reject('数字太大了');
  11. }
  12. }, 2000);
  13. });
  14. return p;
  15. }

我们知道Promise对象除了then方法,还有一个catch方法,它是做什么用的呢?其实它和then的第二个参数一样,用来指定reject的回调,用法是这样:

  1. getNumber()
  2. .then(function(data){
  3. console.log('resolved');
  4. console.log(data);
  5. })
  6. .catch(function(reason){
  7. console.log('rejected');
  8. console.log(reason);
  9. });

五,all的用法

Promise的all方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调

  1. Promise
  2. .all([runAsync1(), runAsync2(), runAsync3()])
  3. .then(function(results){
  4. console.log(results);
  5. });

五,race的用法

all方法的效果实际上是「谁跑的慢,以谁为准执行回调」,那么相对的就有另一个方法「谁跑的快,以谁为准执行回调」,这就是race方法,这个词本来就是赛跑的意思


以上就是对ES6 promise知识的总结

参考:http://www.cnblogs.com/lvdabao/p/es6-promise-1.html

浅谈ES6原生Promise:http://blog.csdn.net/sinat_17775997/article/details/60581125

ES6笔记 - Promise模式:http://blog.csdn.net/sinat_17775997/article/details/60581125

发表评论

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

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

相关阅读

    相关 ES6 Promise

    Promise promise对象从语法上来看呢,是一个构造函数,用来生成Promise实例,用来封装异步操作,并提供成功后或失败后的结果 所谓Promise,简单说

    相关 ES6 Promise

    promise是一种解决异步函数传递数据问题 回调函数解决---->回调地狱 .Promise Promise是一个对象, 使用时需要创建这个对象 new P

    相关 es6 Promise

    传统实现异步操作就是采用回调函数,回调函数方式本身没有什么问题,但是在多重回调层层嵌套的情况下,那么代码的可阅读性就会出现问题。 Promise对象是一个新的异步操作解决方

    相关 ES6-Promise

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

    相关 ES6promise法则

    一,promise用来解决什么问题的 > Promise > 为异步编程提供统一的解决方案,比传统的回调和事件更加合理有效。多重嵌套的回调函数,代码是横向发展,不是纵

    相关 ES6 Promise 使用

      Promise 是什么?         Promise 是一个对象,它用于异步计算。它可以将异步操作队列化,按照期望的顺序执行,并返回符合预期的结果。它是异步编程