console.dir(Promise)
//我写的东西,严格意义上来讲不是自己的原创,是踩在巨人的肩膀上的学习笔记,加入自己的理解,以便日后翻阅容易理解
//我是在这个博主上学习的,讲的很好很容易理解 http://www.cnblogs.com/lvdabao/p/es6-promise-1.html
// http://www.cnblogs.com/lvdabao/
// Promise 是一个构造函数 与new配合使用,new出来的对象上面有then,catch方法
// Promise构造函数里接收一个参数,是一个函数,里面接收两个参数:resolve,reject
// resolve是函数成功后的回调函数,reject是函数失败后的回调函数(说法不准确,但是这样有助于我的理解)
// function runasync(){
// var p= new Promise(function(resolve,reject){
// setTimeout(() => {
// console.log('执行完成');
// resolve('resolve 成功回调')
// }, 2000);
// });
// return p;
// }
// runasync().then(function(data){
// console.log(data)
// });
//runasync()方法成功之后。直接调用then方法,他很就收一个参数,是函数,并且拿到嗲用resolve时,传的参数
//输出结果就是 执行完成
// resolve 成功回调
//其实就是runasync()方法成功之后执行了一个回调函数
//链式操作的用法
// function func1(){
// var p=new Promise(function(resolve,reject){
// setTimeout(()=>{
// console.log('func1')
// resolve('canshufunc1')
// },2000)
// })
// return p;
// }
// function fun2(){
// var p=new Promise(function(resolve,reject){
// setTimeout(()=>{
// console.log('fun2')
// resolve('canshufun2')
// },2000)
// })
// return p;
// }
// function fun3(){
// var p=new Promise(function(resolve,reject){
// setTimeout(()=>{
// console.log('fun3')
// resolve('canshufun3')
// },2000)
// })
// return p;
// }
// func1().then(function(data){
// console.log(data)
// return fun2();
// }).then(function(data1){
// console.log(data1)
// return '直接返回数据'
// }).then(function(data){
// console.log(data)
// })
//then里面的这个参数是一个方法,对应的是 Promise方法里的参数resolve,data就是里面的参数
//也可以直接返回数据 return ‘直接返回数据’ ,这样最后一步的输出就是 ‘直接返回数据’
//reject的用法 (失败的回调自我理解)
// function rejectfun(){
// var p=new Promise(function(resolve,reject){
// setTimeout(()=>{
// var num=Math.ceil(Math.random()*10); //生成1-10的随机数;
// if(num<=5){
// resolve(num)
// }else{
// reject(num+'数字太大啦')
// }
// })
// })
// return p;
// }
// rejectfun().then(
// function(data){
// console.log('resolve')
// console.log(data)
// },
// function(data){
// console.log('reject')
// console.log(data)
// }
// )
//then中第一个参数对应的是resolve‘成功’,第二个参数对应的是reject‘失败’
//catch ,和then的第二个参数的类似,就是then执行失败执行catch,用法
// rejectfun().then(function(data){
// console.log('resolve')
// console.log(data)
// console.log(dadadadd)
// }).catch(function(reason){
// console.log('reject')
// console.log(reason)
// })
// dadadadd因为没有定义,所以会报错,按以往的程序,就不会继续放下走了,现在程序报错会走catch告知,程序继续
//all 用法
//Promise的all方法提供了并行执行异步操作的能力,并且在所有异步操作完成后才执行回调函数
//Promise 的all方法提供了并行执行异步操作的能力,并且在所有异步操作完成后才执行回调函数
function all1(){
var p =new Promise(function(resolve,reject){
setTimeout(function(){
console.log('all1执行')
resolve('all111111')
},3000)
})
return p;
}
function all2(){
var p =new Promise(function(resolve,reject){
setTimeout(function(){
console.log('all2执行')
resolve('all222')
},1000)
})
return p;
}
function all3(){
var p =new Promise(function(resolve,reject){
setTimeout(function(){
console.log('all3执行')
resolve('all333')
},2000)
})
return p;
}
// Promise.all([all1(),all2(),all3()]).then(function(data){
// console.log(data)
// })
// all方法,就是等着几个函数都加载完了,再走then的函数 ,是以最后一个加载完的函数为准【谁跑的慢以谁为准】。
//race方法,也是并行执行异步操作,但这个是【谁跑的快,以谁为准,谁跑赢了,then就执行谁】
// Promise.race([all1(),all2(),all3()]).then(function(data){
// console.log(data)
// })
// all2执行完了,执行then,然后接着执行 all1 all3
// 应用场景举例:比如请求一个图片资源
function raceimg(){
var p=new Promise(function(resolve,reject){
var img=new Image();
img.οnlοad=function(){
resolve(img)
}
img.src='xxxxx';
})
return p;
}
function timeout(){
var p=new Promise(function(resolve,reject){
setTimeout(()=>{
reject('图片请求超时')
},2000)
})
return p;
}
Promise.race([raceimg(),timeout()]).then(function(results){
console.log(results)
}).catch(function(reason){
console.log(reason)
})
// raceimg()和timeout()谁先跑赢了就走谁,raceimg赢了,走then 要是5秒内图片加载不出来,就走catch
//我写的东西,严格意义上来讲不是自己的原创,是踩在巨人的肩膀上的学习笔记,加入自己的理解,以便日后翻阅容易理解
//我是在这个博主上学习的,讲的很好很容易理解 http://www.cnblogs.com/lvdabao/p/es6-promise-1.html
// http://www.cnblogs.com/lvdabao/
// Promise 是一个构造函数 与new配合使用,new出来的对象上面有then,catch方法
// Promise构造函数里接收一个参数,是一个函数,里面接收两个参数:resolve,reject
// resolve是函数成功后的回调函数,reject是函数失败后的回调函数(说法不准确,但是这样有助于我的理解)
// function runasync(){
// var p= new Promise(function(resolve,reject){
// setTimeout(() => {
// console.log('执行完成');
// resolve('resolve 成功回调')
// }, 2000);
// });
// return p;
// }
// runasync().then(function(data){
// console.log(data)
// });
//runasync()方法成功之后。直接调用then方法,他很就收一个参数,是函数,并且拿到嗲用resolve时,传的参数
//输出结果就是 执行完成
// resolve 成功回调
//其实就是runasync()方法成功之后执行了一个回调函数
//链式操作的用法
// function func1(){
// var p=new Promise(function(resolve,reject){
// setTimeout(()=>{
// console.log('func1')
// resolve('canshufunc1')
// },2000)
// })
// return p;
// }
// function fun2(){
// var p=new Promise(function(resolve,reject){
// setTimeout(()=>{
// console.log('fun2')
// resolve('canshufun2')
// },2000)
// })
// return p;
// }
// function fun3(){
// var p=new Promise(function(resolve,reject){
// setTimeout(()=>{
// console.log('fun3')
// resolve('canshufun3')
// },2000)
// })
// return p;
// }
// func1().then(function(data){
// console.log(data)
// return fun2();
// }).then(function(data1){
// console.log(data1)
// return '直接返回数据'
// }).then(function(data){
// console.log(data)
// })
//then里面的这个参数是一个方法,对应的是 Promise方法里的参数resolve,data就是里面的参数
//也可以直接返回数据 return ‘直接返回数据’ ,这样最后一步的输出就是 ‘直接返回数据’
//reject的用法 (失败的回调自我理解)
// function rejectfun(){
// var p=new Promise(function(resolve,reject){
// setTimeout(()=>{
// var num=Math.ceil(Math.random()*10); //生成1-10的随机数;
// if(num<=5){
// resolve(num)
// }else{
// reject(num+'数字太大啦')
// }
// })
// })
// return p;
// }
// rejectfun().then(
// function(data){
// console.log('resolve')
// console.log(data)
// },
// function(data){
// console.log('reject')
// console.log(data)
// }
// )
//then中第一个参数对应的是resolve‘成功’,第二个参数对应的是reject‘失败’
//catch ,和then的第二个参数的类似,就是then执行失败执行catch,用法
// rejectfun().then(function(data){
// console.log('resolve')
// console.log(data)
// console.log(dadadadd)
// }).catch(function(reason){
// console.log('reject')
// console.log(reason)
// })
// dadadadd因为没有定义,所以会报错,按以往的程序,就不会继续放下走了,现在程序报错会走catch告知,程序继续
//all 用法
//Promise的all方法提供了并行执行异步操作的能力,并且在所有异步操作完成后才执行回调函数
//Promise 的all方法提供了并行执行异步操作的能力,并且在所有异步操作完成后才执行回调函数
function all1(){
var p =new Promise(function(resolve,reject){
setTimeout(function(){
console.log('all1执行')
resolve('all111111')
},3000)
})
return p;
}
function all2(){
var p =new Promise(function(resolve,reject){
setTimeout(function(){
console.log('all2执行')
resolve('all222')
},1000)
})
return p;
}
function all3(){
var p =new Promise(function(resolve,reject){
setTimeout(function(){
console.log('all3执行')
resolve('all333')
},2000)
})
return p;
}
// Promise.all([all1(),all2(),all3()]).then(function(data){
// console.log(data)
// })
// all方法,就是等着几个函数都加载完了,再走then的函数 ,是以最后一个加载完的函数为准【谁跑的慢以谁为准】。
//race方法,也是并行执行异步操作,但这个是【谁跑的快,以谁为准,谁跑赢了,then就执行谁】
// Promise.race([all1(),all2(),all3()]).then(function(data){
// console.log(data)
// })
// all2执行完了,执行then,然后接着执行 all1 all3
// 应用场景举例:比如请求一个图片资源
function raceimg(){
var p=new Promise(function(resolve,reject){
var img=new Image();
img.οnlοad=function(){
resolve(img)
}
img.src='xxxxx';
})
return p;
}
function timeout(){
var p=new Promise(function(resolve,reject){
setTimeout(()=>{
reject('图片请求超时')
},2000)
})
return p;
}
Promise.race([raceimg(),timeout()]).then(function(results){
console.log(results)
}).catch(function(reason){
console.log(reason)
})
// raceimg()和timeout()谁先跑赢了就走谁,raceimg赢了,走then 要是5秒内图片加载不出来,就走catch