zoukankan      html  css  js  c++  java
  • ES6之promise

    一丶什么是promise

    1.Promise是异步编程的一种解决方案,它有三种状态,分别是pending-进行中、resolved-已完成、rejected-已失败

    2.ES6之前的promise需要引入第三方库

    二丶promise的优缺点

    优点:主要解决回调地狱问题,使得代码更清晰,减少嵌套数;

    缺点:一旦创建,无法取消,比如点赞操作,快速点两次按钮,

    特点:(1)对象的状态不受外界影响

       (2)一旦创建,无法取消

    三丶.then

    1. .then有两个参数,第一个参数是Resolved状态异步成功后的回调函数,第二个参数是失败后Rejected状态的回调函数;

    2. .then方法返回的是一个新的Promise实例,可以按照次序依次调用回调函数

    3. 注意:promise的抛出错误具有冒泡性质,.catch里面可以统一捕获,所以建议把错误统一写在catch里

    四丶.catch

    1.用于指定发生错误时的回调函数

    五丶.all

    1.Promise.all方法接受一个数组作为参数,p1p2p3都是 Promise 实例,当p1、p2、p3的状态都变成resolved时,promise才会变成resolved,并调用then()的已完成回调,但只要有一个变成rejected状态,promise就会立刻变成rejected状态

    var p = Promise.all([p1, p2, p3]);
    var promises = [2, 3, 5, 7, 11, 13].map(function (id) {
      return getJSON('/post/' + id + ".json");
    });
    
    Promise.all(promises).then(function (posts) {
      // ...
    }).catch(function(reason){
      // ...
    });

    六丶.race

    1.“竞速”方法,参数与Promise.all()相同,不同的是,参数中的p1、p2、p3只要有一个改变状态,promise就会立刻变成相同的状态并执行对于的回调

    七丶resolve

    有时需要将现有对象转为Promise对象,Promise.resolve方法就起到这个作用

    八丶reject

    Promise.reject(reason)方法也会返回一个新的 Promise 实例,该实例的状态为rejected

    九丶done

    Promise对象的回调链,不管以then方法或catch方法结尾,要是最后一个方法抛出错误,都有可能无法捕捉到(因为Promise内部的错误不会冒泡到全局)。因此,我们可以提供一个done方法,总是处于回调链的尾端,保证抛出任何可能出现的错误。

    十丶finally

    finally方法用于指定不管Promise对象最后状态如何,都会执行的操作。它与done方法的最大区别,它接受一个普通的回调函数作为参数,该函数不管怎样都必须执行。

     
  • 相关阅读:
    python生成CSV文件并发送邮件
    Live2d Test Env
    Live2d Test Env
    Live2d Test Env
    Live2d Test Env
    Live2d Test Env
    Live2d Test Env
    Live2d Test Env
    Live2d Test Env
    扔鸡蛋
  • 原文地址:https://www.cnblogs.com/SunShineKG/p/7403792.html
Copyright © 2011-2022 走看看