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); });