欢迎光临
我们一直在努力

ES6 | 异步编程Promise

Promise简介

Promise是ES6新增的异步编程方案,比传统的异步方案(回调函数和事件)更合理更强大。Promise简单说就是一个容器,里面保存着一个尚未完成且预计在未来完成的异步操作。

Promise是一个构造函数,可以通过new来创建一个Promise对象。

Promise状态

Promise对象代表一个异步操作,有三种状态:

  • pending 进行中
  • fulfilled 成功
  • rejected 失败

Promise对象的状态改变有两种

从 pending 变为 fulfilled,从 pending 变为 rejected。

注意:状态改变是单向的,一旦改变,就不能恢复了。

var p = new Promise(function(resolve, reject) {
  // do something ...
  if (/* 异步操作成功 */){
    resolve(value);
  } else {
    reject(error);
  }
});

Promise构造函数接受一个函数作为参数,参数函数有两个参数resolve和reject。

resolve和reject的作用是将promise对象的状态从“进行中”变为“成功”,在异步操作成功时调用,并将异步操作的结果,作为参数传递出去。

reject 函数的作用是,将Promise对象的状态从“进行中”变为“失败”,在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

p.then(function(value) {
  // success
}, function(error) {
  // failure  可选
});

Promise.then方法

第一个参数是resolved状态的回调函数

第二个参数(可选)是rejected状态的回调函数

方法返回的是一个新的promise实例

Promise catch方法

用于指定发生错误时的回调函数,可以捕获then里面的错误。

Promise.all

可以将多个Promise实例包装成一个新的Promise实例。

  • 接受一个数组作为参数
  • 数组可以是promise对象,也可以是其他值,只有promise会等待状态改变
  • 当所有的子promise都完成,该promise完成,返回值时全部值的数组
  • 如果有任何一个失败,该promise失败,返回值是一个失败的子promise的结果
Promise.all([p1,p2,p3]).then(function (arr){
    console.log(arr);
},function (error){
    console.log(error);
});

Promise.race()

Promise.race(iterable) 方法返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝。

const promise1 = new Promise((resolve, reject) => {
  setTimeout(resolve, 500, 'one');
});

const promise2 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'two');
});

Promise.race([promise1, promise2]).then((value) => {
  console.log(value);
  // Both resolve, but promise2 is faster
});
// expected output: "two"
赞(0) 打赏
未经允许不得转载:散人研 » ES6 | 异步编程Promise
分享到: 更多 (0)

评论 抢沙发

5 + 5 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏