Promise(一)

此文为《深入理解ES6》摘抄笔记

Promise 基础

Promise 相当于异步操作结果的占位符,不会订阅一个事件,也不会传一个回调函数给目标函数,而是让函数返回一个Promise。

1
2
// readFile 承诺在未来的某个时刻完成
let promise = readFile("test.txt")

readFile()不会立即开始读取文件,函数会先返回一个表示异步操作的Promise对象,未来对这个对象的操作取决于Promise的生命周期

Promise 生命周期

在上面的示例中,readFile()返回Promise对象时,它变为pending状态,操作结束后,Promise可能会进入以下两个状态之一:

  • Fulfilled Promise异步操作成功完成
  • Rejected Promise异步操作未能成功完成

then() & catch()

所有Promise都有then()方法,它接受两个参数,一个是Promise状态变为fulfilled时调用的函数,一个是Promise状态变为rejected时调用的函数。

Promise有一个catch()方法,相当于只传入拒绝处理程序的then()方法。

创建未完成的Promise

Promise构造函数可以创建新的Promise,构造函数只接受一个参数:包含初始化Promise代码的执行器函数。

执行器接受两个参数,分别是resolve()函数和reject()函数。

1
2
3
4
5
6
7
8
9
10
let promise = new Promise(function(resolve, reject) {
console.log('Promise');
resolve();
});
promise.then(function() {
console.log('Resolved');
});
console.log('Hi');

输出为:

1
2
3
Promise
Hi
Resolved

Promise执行器会立即执行,所以首先打印Promise,虽然then()的调用位于console.log('Hi');之前,但是它并没有立即执行。因为完成处理程序的拒绝处理程序总是在执行器完成后被添加到任务队列的末尾。

创建已处理的Promise