zoukankan      html  css  js  c++  java
  • promise对象的使用

    什么是promise:

    Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。(地狱回调)

    promise对象的两大特点:

    1.对象不受外界的影响

    2.一旦状态发生改变,就不会再发生改变,任何时候都能得到这个结果。

    getSiginManageHeader: function ({ commit, dispatch },data) {
        return new Promise((resolve) => {
          request.getSiginManageHeader(data).then(res => {
            resolve(res.data)
          })
        })
      },
    

      promise对象的状态改变,只有两种可能,一种是变成fulfilled(实现),另一种是变成rejected(驳回),这两种状态

    现在的项目中,为了方便,基本上就返回两个值了,一个resolve成功的情况,另一个就是error失败的情况。

    做个简单的例子:

    new Promise((resolve, reject) => {
        resolve(1);
        console.log(2);
      }).then(r => {
        console.log(r);
      });
    
    出来的值是2,1
    

      这里promise正常运行,打印出2然后resolve给指出去了1,当.then()的方法后,输出console.log(r),r等于1

      .then()和.catch():

    .then()就是成功后的响应,.catch()就是失败后报错才会走的

     promise的机制原理,如果走.then()的话,就一直走.then()。.catch()同理。

    promise的.then()和.catch()的顺序没有定义,随便放

    Promise.resolve()
    .catch(function(error) {
      console.log('错了', error);
    })
    .then(function() {
      console.log('对了');
    });
    

      如果它成功了,就跳过.catch()直接走.then(),如果.then()里面的事件报错的话,还是会走.catch()的

    es8里面有个简写方法

    promise
    .finally(() => {
      // 语句
    });
    
    // 等同于
    promise
    .then(
      result => {
        // 语句
        return result;
      },
      error => {
        // 语句
        throw error;
      }
    );
    

      看着就叼。

    感觉有用的promise方法all()方法(实际感觉这个方法真没啥用还多写了一步)

    const p1 = new Promise((resolve, reject) => {
      resolve('hello');
    })
    .then(result => result)
    .catch(e => e);
    
    const p2 = new Promise((resolve, reject) => {
      throw new Error('报错了');
    })
    .then(result => result)
    .catch(e => e);
    
    Promise.all([p1, p2])
    .then(result => console.log(result))
    .catch(e => console.log(e));
    

      看上面的代码,p1方法正确的话走的是resolve,错误的话它还是有catch方法,p2直接走的一个错误方法,走的是自身带的那个catch方法,在最外面的那个all方法,就会一直走的是then()p2的错误在自身的上面就已经把。catch方法走完了,all里面的就相当于一点用都没有。

    其实我感觉把,你竟然已经就把p1p2的promise方法都已经弄完了,为啥你还在all一下,我感觉没啥用。

       Promise.resolve()方法,将现有对象转为Promise对象

    (1)参数是一个Promise对象,他会原封不动的还原回来

    (2)参数是一个thenable对象,用上面的方法会转化未promise对象

    (3)参实不是一个promise对象,其他值的时候,会返回一个新的promise对象

    (4)Promise.resolve()方法允许调用时不带参数,直接返回一个resolved状态的 Promise 对象。

  • 相关阅读:
    Documentum之基础(1)
    tomcat部署项目,war包问题[转]
    AD与LDAP区别
    Microsoft Visual Studio2010--此时无足够的可用内存,无法满足操作的预期要求,可能是由于虚拟地址空间碎片造成的。请稍后重试。
    Oracle 11g服务器安装详细步骤
    Oracle 11g 密码永不过期设置
    oracle 11g dbf数据文件从C盘迁移到D盘
    Swift 简介
    0Day 密码重置dede阿帕奇强制安装
    PS抠图教程_抠图小技巧_常用抠图小技巧_图片结构与配色
  • 原文地址:https://www.cnblogs.com/yishifuping/p/10540596.html
Copyright © 2011-2022 走看看