ECMAScript 6 之 Promise 命令

Promise含义

简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。

Promise对象有三个状态:准备状态(pending)、成功状态(resolve)、失败状态(reject)。

用途:

可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。


  • 实例化
const p = new Promise(function(resolve, reject)=>{
  // 代码段

  if (/* 异步操作成功 */){
    resolve(value);
  } else {
    reject(error);
  }
});

Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolvereject

  • 调用
 p.then((data)=>{
     //该调用函数在p执行resolve后执行,并且data为resolve传递的参数,该方法返回当前promise对象
 }).catch((error)=>{
     //该调用函数在p执行reject后执行,并且error为reject传递的参数,该方法返回当前promise对象
 });

案例如下:

function timeout(ms) {
  return new Promise((resolve, reject) => {
    setTimeout(resolve, ms, '执行成功');
  });
}

timeout(2000).then((value) => {
  console.log(value);
});

上面代码中,timeout方法返回一个Promise实例,表示一段时间(2s)以后才会发生的结果。过了指定的时间(ms参数)以后,Promise实例的状态变为resolved,就会触发then方法绑定的回调函数。

Promise新建后就会立即执行:

let p = new Promise(function(resolve, reject) {
  console.log('Promise');
  resolve();
});

p.then(function() {
  console.log('resolved');
});

console.log('Hi!');

// Promise
// Hi!
// resolved

上面代码中,Promise 新建后立即执行,所以首先输出的是Promise。then方法指定的回调函数,将在当前脚本所有同步任务执行完才会执行,所以resolved最后输出。

猜你喜欢

转载自blog.csdn.net/qq_42720683/article/details/83026109
今日推荐