- 异步编程
- 传统方案:事件 + 回调函数
- ES6 的新方案:Promise 对象
- Promise 异步操作有 3 种状态
- pending: 进行中
- resolved: 已完成
- rejected: 已失败
- Promise 异步操作的状态变化仅限下面两种方式
pending –> resolved
- pending –> rejected
创建一个 Promise 实例:
promise 构造函数接收一个函数作为参数,并且这个函数有两个参数,这两个参数是也是两个函数,不过这两个函数由 JavaScript 引擎自动提供,不用自己部署,这两个函数通常表示为 resolve,
reject
let promise = new Promise(function(resolve, reject) { // ... some code if (/* 异步操作成功 */){ resolve(value); } else { reject(error); } });
- resolve 函数的作用是: 将 Promise 对象的状态从 pending 变为 resolved,并将异步操作成功的结果,作为参数传递出去
- reject 函数的作用是: 将 Promise 对象的状态从 pending 变为 rejected,并将异步操作报出的错误,作为参数传递出去
- Promise 新建实例时,构造函数的函数参数会立即执行
let promise = new Promise(function(resolve, reject) { resolve(); console.log(‘new Promise‘); }); promise.then(function() { console.log(‘Resolved.‘); }); console.log(‘Hi!‘); // new Promise // Hi! // Resolved.
基本方法:
- Promise.prototype.then(onResolved, onRejected): 这个方法在 Promise 实例的状态发生改变时才进行调用
- then 方法可以接受两个回调函数作为参数
- 第一个回调函数在状态从 pending 变为 resolved 时才进行回调
- 第二个回调函数在状态从 pending 变为 rejected 时才进行回调,可选
promise.then(function(value){ // success }, function(error){ // error });
- then 方法可以接受两个回调函数作为参数
- then 方法返回的是一个新的 Promise 实例(注意,不是原来的那个 Promise 实例),因此可以采用链式写法
promise.then(function(value){ // success }, function(error){ // error }).then(function(value){ // success }, function(error){ // error });
- Promise.prototype.catch(): 这个方法仅在 Promise 实例的状态从 pending 变为 rejected 时才进行调用
- 相当于:Promise.prototype.then(null, onRejected)
- catch 方法会捕获其前面所有发生的错误
-
// 最佳写法 promise.then(function(value){ // success }).catch(function(error){ // error });
-
- Promise.all()
- Promise.race()
- Promise.reject()
- Promise.resolve()
待补充..........
时间: 2024-10-07 10:08:58