1,promise中then的使用
function runAsync1(){
var p=new Promise(function(resolve,reject){
setTimeout(() => {
console.log('执行完成runAsync1');
resolve('随便什么数据1');
}, 500);
});
return p;
}
function runAsync2(){
var p=new Promise(function(resolve,reject){
setTimeout(() => {
console.log('执行完成runAsync2');
resolve('随便什么数据2');
}, 1000);
});
return p;
}
function runAsync3(){
var p=new Promise(function(resolve,reject){
setTimeout(() => {
console.log('执行完成runAsync3');
resolve('随便什么数据3');
}, 2000);
});
return p;
}
runAsync1().then(function(data){
console.log(data);
return runAsync2();
})
.then(data=>{
console.log(data);
return runAsync3(); //如果不想打印出3里的内容直接可以在这里return 别的出去
})
.then(data=>{
console.log(data);
})
//执行完成runAsync1
//随便什么数据1
//执行完成runAsync2
//随便什么数据2
//执行完成runAsync3
//随便什么数据3
2,reject与catch
//reject用法,失败的状态原因
function getNumber(){
var p = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(()=>{
var num = Math.ceil(Math.random()*10); //生成1-10的随机数
console.log(num);
if(num<=5){
resolve(num);
}
else{
reject('数字太大了');
}
}, 2000);
});
return p;
}
getNumber()
.then(data=>{
console.log(resolved);
console.log(data);
console.log(somedata);//此处的somedata未定义
})
.catch((reason)=>{
console.log('rejected');
console.log(reason);
});
//catch 类似try catch如果我们then里的有未定的错误时,不会阻止运行,也不会报错,直接照常往下运行
//也就是说进到catch方法里面去了,而且把错误原因传到了reason参数中。即便是有错误的代码也不会报错了,这与我们的try/catch语句有相同的功能。
3,all的用法
/*all的调用
用Promise.all来执行,all接收一个数组参数,
里面的值最终都算返回Promise对象。
这样,三个异步操作的并行执行的,等到它们都执行完后才会进到then里面。
那么,三个异步操作返回的数据哪里去了呢?都在then里面呢,
all会把所有异步操作的结果放进一个数组中传给then,
就是上面的results
*/
function runAsync1(){
var p=new Promise(function(resolve,reject){
setTimeout(() => {
console.log('执行完成runAsync1');
resolve('随便什么数据1');
}, 500);
});
return p;
}
function runAsync2(){
var p=new Promise(function(resolve,reject){
setTimeout(() => {
console.log('执行完成runAsync2');
resolve('随便什么数据2');
}, 1000);
});
return p;
}
function runAsync3(){
var p=new Promise(function(resolve,reject){
setTimeout(() => {
console.log('执行完成runAsync3');
resolve('随便什么数据3');
}, 2000);
});
return p;
}
//调用 all以数组的形式把这几个函数接收,然后把所有函数的返回值统一放一个数组里给then
Promise
.all([runAsync1(), runAsync2(), runAsync3()])
.then(function(results){
console.log(results.push('aaa'));
console.log(results);
});
4,race有个时间长短的先会执行时间最短的 reject内容,下面的reject里的内容都不会执行了
//race
function runAsync1(){
var p=new Promise(function(resolve,reject){
setTimeout(() => {
console.log('执行完成runAsync1');
resolve('随便什么数据1');
},2000);
});
return p;
}
function runAsync2(){
var p=new Promise(function(resolve,reject){
setTimeout(() => {
console.log('执行完成runAsync2');
resolve('随便什么数据2');
}, 1);
});
return p;
}
function runAsync3(){
var p=new Promise(function(resolve,reject){
setTimeout(() => {
console.log('执行完成runAsync3');
resolve('随便什么数据3');
}, 2000);
});
return p;
}
Promise
.race([runAsync1(),runAsync2(),runAsync3()])
.then(function(results){
console.log('a=='+results);
})
// 执行完成runAsync2
// 随便什么数据2
// 执行完成runAsync1
// 执行完成runAsync3