一.promise是什么?
1) Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件
——更合理和更强大。
2) 所谓promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通
常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操
作的消息。
二.promise对象的特点
1)对象的状态不受外界影响,Promise 对象代表一个异步操作,有三种状态:
Pending(进行中)、Resolved(已完成,又称 Fulfilled)和 Rejected(已失败)
2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。
三.promise的使用
首先是promise的使用语法
new Promise(function(resolve,reject){}/*code*/);
在实例化Promise时需要传入一个函数code作为参数,并且在Promise构造函数执行时
同步执行。如以下实例:
var a = new Promise(function(resolve,reject){
var timer = setTimeout(function(){
console.log('哒哒哒');
},1000);
});
我们可以看到1秒后在控制台输出相应的结果,这就说明在实例化过程中,作为参数的
code函数也会执行。
从上面的实例中我们看到,code函数还有两个参数resolve和reject,其实这两个参
数也是函数,在code执行时被调用,下面我们具体来谈谈resolve和reject的用法。
四.resolve和reject的用法
1)resolve的用法
当我们在code函数中调用resolve方法时,Promise的状态就变成fulfilled,即操作成
功状态,还记得上面Promise.prototype上面的then和catch方法吗?当Promise状态
为fullfilled状态时执行then方法里的操作,
注意了,then方法里面有两个参数onfulfilled(Promise为fulfilled状态时执行) 和
onrejected(Promise为rejected状态时执行),步骤如下:
1) 实例化Promise(new Promise(function(resolve,reject)))
2) 用Promise的实例调用then方法
如下例:
var a = new Promise(function (resolve, reject) {
var timer = setTimeout(function () {
console.log('执行操作1');
resolve('这是数据1');
}, 1000);
});
p.then(function (data) {
console.log(data);
console.log('这是成功操作');
});
简单的理解就是调用resolve方法,Promise变为操作成功状态(fulfilled),执行then
方法里面onfulfilled里的操作。其实then里面的函数就是我们平时所说的回调函数,只
不过在这里只是把它分离出来而已。我们可以看到控制台上的输出结果如下所示:
2)reject的用法
看了上面的实例, 我相信应该也很容易理解reject方法了, 就是调用reject方法后,
Promise状态变为rejected,即操作失败状态, 此时执行then方法里面onrejected操
作, 上面我们提到了then方法有两个参数, 一种是Promise状态为fulfilled时执行
(onfullfilled),一种是Promise状态为rejected时执行(onrejected),其实就是类
似于jquery里的hover方法里面的两个参数一样,来看看下面的例子:
var a = new Promise(function (resolve, reject) {
var flag = false;
if(flag){
resolve('这是数据2');
}else{
reject('这是数据2');
}
});
p.then(function(data){//状态为fulfilled时执行
console.log(data);
console.log('这是成功操作');
},function(reason){ //状态为rejected时执行
console.log(reason);
console.log('这是失败的操作');
});
我们可以看到输出的结果:
以上就是promise的部分用法,谢谢支持!!!