1、then的基本简单用法,当异步获取完数据后就会自动执行then的方法
function runAsync1(){
var p = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(function(){
console.log('执行完成');
resolve('随便什么数据');
}, 3000);
});
return p;
}
renAsync1().then(function(data){
console.log(data);//随便什么数据
})
2、then的链式基本用法,一个一个触发
runAsync1().then(function(data){
console.log(data);//随便什么数据1
return runAsync2();
}).then(function(data){
console.log(data);//随便什么数据2
})
3、提供两种数据传递方式resolve(),和reject()(注意两者一次只能触发其一)
function getNumber(){
var p = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(function(){
var num = Math.ceil(Math.random()*10); //生成1-10的随机数
if(num<=5){
resolve(num);
}
else{
reject('数字太大了');
}
}, 2000);
});
return p;
}
getNumber()
.then(
function(data){
console.log('resolved');
console.log(data);
},
function(reason, data){
console.log('rejected');
console.log(reason);
}
);
4、当发生错误时触发的catch
getNumber()
.then(function(data){
console.log('resolved');
console.log(data);
console.log(somedata); //此处的somedata未定义
})
.catch(function(reason){
console.log('rejected');
console.log(reason);
});
5、全部同时执行的all(全部执行完成才输出数据,且数据也是数组格式)
Promise
.all([runAsync1(), runAsync2(), runAsync3()])
.then(function(results){
console.log(results);
});
6、谁快先执行谁的race
Promise
.race([runAsync1(), runAsync2(), runAsync3()])
.then(function(results){
console.log(results);
});