ES6 promise详解

747 阅读3分钟

「本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!

1.什么是promise?

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

一个 Promise 对象代表一个在这个 promise 被创建出来时不一定已知的值。它让您能够把异步操作最终的成功返回值或者失败原因和相应的处理程序关联起来。 这样使得异步方法可以像同步方法那样返回值:异步方法并不会立即返回最终的值,而是会返回一个 promise,以便在未来某个时候把值交给使用者。

2.promise的状态

Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)

  • 进行中(pending): 初始状态,既没有成功,也没有失败。
  • 已成功(fulfilled): 代表操作成功完成。
  • 已失败(rejected): 代表操作失败。

3.promise怎样使用?

Promise 其实是一个对象、一个容器,它代表了一个异步操作的最终完成或者失败。因为大多数人仅仅是使用已创建的 Promise 实例对象

本质上 Promise 是一个函数返回的对象,我们可以在它上面绑定回调函数,这样我们就不需要在一开始把回调函数作为参数传入这个函数了。

假设现在有一个名为 test() 的函数,它接收一些配置和两个回调函数,然后异步地生成音频文件。一个回调函数在文件成功创建时被调用,另一个则在出现异常时被调用。


// 成功的回调函数
function test1(x) {
  console.log("一个成功的函数: " + x);
}

// 失败的回调函数
function test2(y) {
  console.log("一个失败的函数: " + y);
}

test(www, test1, test2);

4.基本用法

在ES6中规定,Promise对象是一个构造函数,用来生成Promise实例。

我们创造一个Promise实例。


const promise = new Promise(function(success, failure) {
  // ... some code

  if (/* 异步操作成功 */){
    success(value);
  } else {
    failure(error);
  }
});


// Promise 新建后就会立即执行。

let promise = new Promise(function(resolve, reject) {
  console.log('Promise');
  resolve();
});

promise.then(function() {
  console.log('resolved.');
});

console.log('Hello!');

// Promise
// Hello!
// resolved

5.Promise 原型

属性

Promise.prototype.constructor 返回被创建的实例函数. 默认为 Promise 函数.

方法

Promise.prototype.catch(onRejected) 添加一个拒绝(rejection) 回调到当前 promise, 返回一个新的promise。当这个回调函数被调用,新 promise 将以它的返回值来resolve,否则如果当前promise 进入fulfilled状态,则以当前promise的完成结果作为新promise的完成结果.

Promise.prototype.then(onFulfilled, onRejected) 添加解决(fulfillment)和拒绝(rejection)回调到当前 promise, 返回一个新的 promise, 将以回调的返回值来resolve.

Promise.prototype.finally(onFinally) 添加一个事件处理回调于当前promise对象,并且在原promise对象解析完毕后,返回一个新的promise对象。回调会在当前promise运行完毕后被调用,无论当前promise的状态是完成(fulfilled)还是失败(rejected)

6.promise的浏览器兼容性

除了IE浏览器,其他的均兼容。