Promise是异步编程的一种解决方案,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise是一个对象,可以从改变对象获取异步操作的消息。
它可以解决回调地狱的问题,也就是异步深层嵌套问题
Promise 构造函数包含一个参数和一个带有 resolve(解析)和 reject(拒绝)两个参数
的回调。在回调中执行一些操作(例如异步),如果一切都正常,则调用 resolve,否则调用
reject。 对于已经实例化过的 Promise 对象可以调用 Promise.then() 方法,传递 resolve
和 reject 方法作为回调。then()方法接收两个参数:onResolve 和 onReject,分别代表当
前 Promise 对 象在成功或失败时
Promise 的3种状态
Fulfilled 为成功的状态,Rejected 为失败的状态,Pending 既不是 Fulfilld 也 不 是
Rejected 的状态,可以理解为 Promise 对象实例创建时候的初始状态
.catch()
-
获取异常信息
.finally()
-
成功与否都会执行(不是正式标准)
下面我用代码来写下
/*
1. Promise基本使用
我们使用new来构建一个Promise Promise的构造函数接收一个参数,是函数,并且传入两个参数: resolve,reject, 分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数
*/
var p = new Promise(function(resolve, reject){
//2. 这里用于实现异步任务 setTimeout
setTimeout(function(){
var flag = false;
if(flag) {
//3. 正常情况
resolve('hello');
}else{
//4. 异常情况
reject('出错了');
}
}, 100);
});
// 5 Promise实例生成以后,可以用then方法指定resolved状态和reject状态的回调函数
// 在then方法中,你也可以直接return数据而不是Promise对象,在后面的then中就可以接收到数据了
p.then(function(data){
console.log(data)
},function(info){
console.log(info)
});