本文共 1135 字,大约阅读时间需要 3 分钟。
简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。
Promise对象有三个状态:准备状态(pending)、成功状态(resolve)、失败状态(reject)。
可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。
const p = new Promise(function(resolve, reject)=>{ // 代码段 if (/* 异步操作成功 */){ resolve(value); } else { reject(error); }});
Promise
构造函数接受一个函数作为参数,该函数的两个参数分别是resolve
和reject
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
最后输出。
转载地址:http://cwxgn.baihongyu.com/