首页 > 代码库 > es6 之 promise 对象
es6 之 promise 对象
-
异步编程
- 传统方案:事件 + 回调函数
- ES6 的新方案:Promise 对象
-
Promise 异步操作有 3 种状态
- pending: 进行中
- resolved: 已完成
- rejected: 已失败
- Promise 异步操作的状态变化仅限下面两种方式
- 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 方法返回的是一个新的 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()
待补充..........
es6 之 promise 对象
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。