关于Promise你要知道的事

172 阅读2分钟

1.什么是promise?

Promise 是异步编程的一种解决方案。可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果。

从语法上讲,promise是一个对象,从它可以获取异步操作的消息;

从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。

2.为什么会有promise

一般来说我们会碰到的回调嵌套都不会很多,一般就一到两级,但是某些情况下,回调嵌套很多时,代码就会非常繁琐,会给我们的编程带来很多的麻烦,这种情况俗称——回调地狱。

3.promise的使用相关

promise有三种状态: pending(等待态),fulfiled(成功态),rejected(失败态);状态一旦改变,就不会再变。创造promise实例后,它会立即执行。

promise的创建

var promise = new Promise(function(resolve, reject) {
    // 异步处理
    // 处理结束后、调用resolve 或 reject
});

链式操作

.then() 成功

.catch() 失败

.race() 有一个返回就继续

.all() 所有的返回才继续

4.promise的优缺点

优点: 有了 Promise 对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise 对象提供统一的接口,使得控制异步操作更加容易。

缺点: 首先,无法取消 Promise,一旦新建它就会立即执行,无法中途取消。其次,如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部。第三,当处于 Pending 状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

5.实战

  // 方法名
  getLegend() {
      return new Promise((resolve, reject) =>{
        const params = {
          output: 'extend',
          itemids: '1111'
        }
        this.$util.axios({
          method: '/getHost',
          params
        }).then(res => {
          resolve(res)
        }).catch(err => {
        	reject(err)
        })
      })
    }
    // 使用
    this.getLegend().then(res => {
    	console.log(res)
    })