一、Promise对象的三个状态
-
pending:进行中,表示还没有得到结果
-
resolved(Fulfilled):成功。可以继续往下执行
-
rejected: 失败
这三种状态不受外界影响,而且状态只能从pending改变为resolved或者rejected,并且不可逆。在Promise对象的构造函数中,将一个函数作为第一个参数。而这个函数,就是用来处理Promise的状态变化。
new Promise(function(resolve, reject) {
if(true) { resolve() };
if(false) { reject() };
})
上面的resolve和reject都为一个函数,他们的作用分别是将状态修改为resolved和rejected
二、Promise对象中的then方法
Promise对象中的then方法,可以接收构造函数中处理的状态变化,并分别对应执行。then方法有2个参数,第一个函数接收resolved状态的执行,第二个参数接收reject状态的执行。
function promiseStudy(num) {
return new Promise(function(resolve, reject) {
if (num == 1) {
resolve();
} else {
reject();
}
}).then(function() {
console.log('num的参数是1')
}, function() {
console.log('num的参数不是1');
}, )
}
三、Promise中的数据传递
var fn = function(num) {
return new Promise(function(resolve, reject) {
if (typeof num == 1) {
resolve(num);
} else {
reject('TypeError');
}
})
}
fn(2).then(function(num) {
console.log('first: ' + num);
return num + 1;
})
.then(function(num) {
console.log('second: ' + num);
return num + 1;
})
.then(function(num) {
console.log('third: ' + num);
return num + 1;
});
// 输出结果
first: 2
second: 3
third: 4
四、例子
function a(){
var b= new Promise(function(resolve, reject){
//异步操做
setTimeout(function(){
console.log('完成');
resolve('输出的东西');
}, 2000);
});
return b;
}
a().then(function(data){
console.log(data);
//后面能够用传过来的数据作些其余操做
//在a()的返回上直接调用then方法,then接收一个参数,是函数,而且会拿到咱们在a中调用resolve时传的的参数。运行这段代码,会在2秒后输出“完成”,紧接着输出“输出的东西”。
});