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 对象。

原文地址:https://www.cnblogs.com/yishifuping/p/10540596.html