zoukankan      html  css  js  c++  java
  • ES6 学习 -- Promise对象

    1.promise含义:可以将promise对象看成是一个容器,它保存着未来才会结束的某个事件(一般是异步操作事件)的结果,各
    种异步操作都可以用promise对象来处理
    promise的特点:
    (1)promise对象有三个状态:pending(进行中)、fulfilled(已成功)和rejected(已失败),只有异步操作的结果,可
    以决定当前是哪一种状态,其他操作无法改变当前状态
    (2)一旦状态值改变,就不会再变了,任何时候都可以得到这个结果。promise对象的状态改变,只有从pending变为
    fulfilled和从pending变为rejected两种,状态发生改变之后,就不会再变动

    2.promise对象的优缺点:
    优点--- 有了promise对象,就可以将异步操作以同步操作的流程表达出来,避免了多层嵌套的回调函数,另外promise对象提
    供统一的接口,使得控制异步操作更加容易
    缺点:无法取消promise,一旦新建就立即执行,无法取消;如果不设置回调函数,promise内部报错不会反应到外部;当处于
    pending状态时,无法得知目前进展到哪个阶段(是刚刚开始还是即将完成)

    ***解决Promise创建自动执行的办法:将Promise对象在一个函数中定义,当我们调用函数时,才去执行Promise对象

    3.promise对象实例用法
    function getData() {

    // 这里请求后端数据

    let p = new Promise(function(resolve, reject) {
      if(/* 异步操作成功 */) {
        resolve(value); // 请求得到的数据或响应结果
      }else {
        reject(error); // 请求失败原因
      }
    })
    return p;
    };

    // 通过Promise构造函数创建实例,该构造函数接收一个匿名函数作为参数,匿名函数的两个参数resolve和reject都 
    是两个函数。resolve函数的作用是,将Promise对象的状态从“未完成”变成“成功”,在异步操作成功时调用,并作为参数 
    传递出去;reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”,在异步操作失败时调用,并将异步操作报 
    的错作为参数传递出去

    getData().
    then(function(result) { 
      console.log(result);
    })
    .catch(function(error) {   // catch()可以在then()出错的时候直接往下执行,不会直接报错然后终止
      console.log(error);
    })


    Promise.prototype.finally() // 不管Promise对象最后状态如何,该方法都会执行
    如下:
    promise
    .then( result => {...}) // 状态值为resolved时执行
    .catch( error => {...}) // 状态值为rejected时执行
    .finally( ()=> {...}); // 不管如何都会执行

    Promise.all() // 将多个Promise实例,包装成一个新的Promise实例,如下:
    const p = Promise.all([p1, p2, p3]);
    (1)只有p1、p2、p3的状态都变成fulfilled时,p的状态才变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的
    回调函数
    (2)只要p1、p2、p3中的一个状态为rejected,那么p的状态就变成rejected,此时第一个状态为rejected的实例的返回值,会
    传递给p的回调函数

  • 相关阅读:
    [SQL Server] sysobjects的介紹
    [R] [Johns Hopkins] R Programming -- week 3
    [R] 繪圖 Par 函数
    [R] [Johns Hopkins] R Programming -- week 4
    [Ms SQL] 基本創建、修改與刪除
    [R] Lexical & Dynamic Scoping / Execution & Calling environments / Closures
    [R] [Johns Hopkins] R Programming 作業 Week 2
    Python之路【第十七篇】:Django【进阶篇 】
    Django之Form组件
    Python之路【第十六篇】:Django【基础篇】
  • 原文地址:https://www.cnblogs.com/secretAngel/p/9699468.html
Copyright © 2011-2022 走看看