zoukankan      html  css  js  c++  java
  • ES 6 系列

    一、含义

      是异步编程的一种解决方案,es 6 将其变成了标准。

      简单的说是一个容器,里面保存了某个未来才会结束的事件(通常是一个异步操作)的结果。语法上, Promise 是一个对象,从它可以获取异步操作的消息。

      Promise 对象有两个特点:

        1.状态,Promise 对象的状态不受外界影响。一个 Promise 对象代表一个异步操作,只会有三种状态:pending(进行中)、fulfilled(已成功)、rejected(已失败)。这三种状态只会受到异步操作的结果影响,其他都不能影响状态。

        2.一旦状态改变,则就无法再变,任何时候都可以得到这个结果。状态改变后,会一直保持这个结果,称之为 resolved(已定型)。且在改变发生之后,再对 Promise 对象添加回调函数,也会立即得到这个结果(然而这句没理解)。

    二、基本用法

    const promise = new Promise((resolve, reject) => {
      // ... some code
    
      if (/* 异步操作成功 */){
        resolve(value);
      } else {
        reject(error);
      }
    });
    

      目前项目中常用的写法:

    new Promise((resolve, reject) => {
        login(username, userInfo.password).then(response => {
            const data = response.data
            setToken(data.token)
            commit('SET_TOKEN', data.token)
            resolve()
        }).catch(error => {
              reject(error)
    })
    

      resolve 和 reject 函数由 js 引擎提供,不用自己部署;

      resolve 的作用是,将 Promise 对象的状态从 pending 变成 fulfilled ,在异步操作成功时候调用,并将操作的结果,作为参数传递出去;

      reject 的作用是,将 Promise 对象的状态从 pending 变成 rejected,在异步操作失败时候调用,并将操作报出的错误,作为参数传递出去;

      

      Promise 实例生成后,可以用 then 分别指定 fulfilled 状态和 rejected 状态的回调函数:

    promise.then(function(value) {
      // success
    }, function(error) {
      // failure
    });
    

      一般而言,Promise 在新建后就会立即执行,然后执行脚本中接下来的同步任务,所有的同步任务执行完成后,才会执行 then 方法指定的回调函数。

    三、用途

      1.加载图片

    const preloadImage = function (path) {
      return new Promise(function (resolve, reject) {
        const image = new Image();
        image.onload  = resolve;
        image.onerror = reject;
        image.src = path;
      });
    };
    

       2.ajax请求

     

  • 相关阅读:
    在Myeclipse中配置tomcat
    tomcat用startup.bat启动时,界面一闪消失
    单向链表的基本操作
    简单排序的对比
    关于string的排序 选择插入排序
    insertsort
    selectsort
    理解函数式编程
    vue中使用$nextTick后任然无法正确计算出元素高度
    使用vuex+vue-i18n方式国际化
  • 原文地址:https://www.cnblogs.com/cc-freiheit/p/9156721.html
Copyright © 2011-2022 走看看