Promise含义
简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,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
最后输出。