ES6 Promise对象使用浅谈

1.Promise是什么?

 Promise是异步编程的一种解决方案,它是一个构造函数,接受一个函数作为参数,该函数的两个参数分别是resolve和reject。因此可以用new Promise()得到一个Promise实例,它能够解决传统的回调函数嵌套带来的回调地狱问题。

 Promise对象代表一种异步操作,有三种状态:pending(进行中)、fulfilled(已成功)、rejected(已失败),这几个状态一旦确定将不再改变

2. 基本语法

const promise = new Promise(function(resolve, reject){
   //todo

  if(异步操作成功) {
       resolve(data);
   }  else {
       reject(error)

   }
})

其中:resolve函数是异步操作成功时的回调,并将异步操作的结果作为参数传递出去;

reject函数是异步操作失败时的回调,并将异步操作报出的错误作为参数传递出去;

3. 使用Promise.prototype.then()方法指定resolve和reject的回调函数

    then()方法中第一个参数是成功时的回调,第二个参数可选,表示失败时的回调

    promise.then(function(data), {
       //成功回调todo
    }, function(error) {
      //失败回调todo
    })

4. 使用Promise.prototype.catch()方法捕获异常

Promise.prototype.catch()方法是.then(null, reject)的别名,用于指定发生错误时的回调函数

promise.then(function(data), {
       //成功回调todo
    }).catch(functiion(error) {
      //捕获错误error
    })

如果异步操作抛出错误,就会调用catch方法指定的回调函数,处理这个错误,另外, then方法指定的回调函数,如果运行中抛出错误,也会被catch方法捕获;

Promise 对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止;

一般来说,不要在then方法里面定义 reject 状态的回调函数(即then的第二个参数),总是使用catch方法

5. Promise.prototype.finally()方法

finally方法用于指定不管 Promise 对象最后状态如何,都会执行的操作。该方法是 ES2018 引入标准的。

finally方法回调函数不接受任何参数;

promise.then(function(data), {
       //成功回调todo
    }).catch(functiion(error) {
      //捕获错误error
    }).finally(functiion() {
      //finally方法回调函数不接受任何参数
    })

6. 还有一些其它的api,

如Promise.all(),用于将多个 Promise 实例,包装成一个新的 Promise 实例,只有包装的这几个Promise实例都是resolve状态,包装后的Promise才是resolve,否则是reject状态

Promise.race(),

Promise.resolve(),

Promise.reject()

7. 一个异步加载图片的例子

ES6 Promise对象使用浅谈_第1张图片

你可能感兴趣的:(前端,es6,JavaScript,Promise)