Samgao0312 / Blog

MIT License
1 stars 1 forks source link

【再学前端】ES6 —— promise #128

Open Samgao0312 opened 2 years ago

Samgao0312 commented 2 years ago

概念

Promise 是异步编程的一种解决方案,最初由社区提出,后被Es6中作为语言标准,提供原生的 promise 对象。

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

then() 方法

Promise 实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype 上的。它的作用是为 Promise 实例添加状态改变时的回调函数。

采用链式的then,可以指定一组按照次序调用的回调函数。 这时,前一个回调函数,有可能返回的还是一个Promise对象(即有异步操作),这时后一个回调函数,就会等待前一个 Promise 对象的状态发生变化,才会被调用。

catch() 方法

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

finally() 方法

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

promise
.then(result => {···})
.catch(error => {···})
.finally(() => {···});
Promise.prototype.finally = function (callback) {
  let P = this.constructor;
  return this.then(
    value  => P.resolve(callback()).then(() => value),
    reason => P.resolve(callback()).then(() => { throw reason })
  );
};

上面代码中,不管前面的 Promise 是fulfilled还是rejected,都会执行回调函数callback。

all() 方法

Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。

const p = Promise.all([p1, p2, p3]);


其他阅读