Promise
Promise是一个构造函数,方法有:all、reject、resolve、then、catch
resolve:成功
reject:失败
(复制到控制台查看运行结果)
function runAsync1(){ var p = new Promise(function(resolve, reject){ // 做一些异步操作 setTimeout(function(){ console.log(‘异步任务1执行完成‘); resolve(‘随便什么数据1‘); }, 1000); }); return p; } function runAsync2(){ var p = new Promise(function(resolve, reject){ // 做一些异步操作 setTimeout(function(){ console.log(‘异步任务2执行完成‘); resolve(‘随便什么数据2‘); }, 2000); }); return p; } function runAsync3(){ var p = new Promise(function(resolve, reject){ // 做一些异步操作 setTimeout(function(){ console.log(‘异步任务3执行完成‘); resolve(‘随便什么数据3‘); }, 2000); }); return p; } runAsync1() .then(function(data){ console.log(data); return runAsync2(); }) .then(function(data){ console.log(data); return ‘直接返回数据‘; // 这里直接返回数据 }) .then(function(data){ console.log(data); });
all:并行执行,谁跑得慢,以谁为准进行回掉
Promise .all([runAsync1(), runAsync2(), runAsync3()]) // 并行 .then(function(results){ console.log(results); });
race:并行执行,谁跑得快,以谁为准进行回掉
Promise .race([runAsync1(), runAsync2(), runAsync3()]) .then(function(results){ console.log(results); });
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); } );
// 这个和上面功能一样,但是上面有异常不会卡死 getNumber() .then(function(data){ console.log(‘resolved‘); console.log(data); }) .catch(function(reason){ console.log(‘rejected‘); console.log(reason); });
async/await
参考资料
https://www.cnblogs.com/whybxy/p/7645578.html
未完待续。。。
原文:https://www.cnblogs.com/fogmisty/p/10382284.html