Promise 对象编程
异步编程 方案,已同步的方式表达异步的代码,解决回调地狱的问题数组
比传统的解决方案——回调函数和事件——更合理和更强大promise
是一个容器,里面保存着某个将来才会结束的事件(一般是一个异步操做)的结果。异步
从语法上说,Promise 是一个对象,从它能够获取异步操做的消息。异步编程
Promise 提供统一的 API,各类异步操做均可以用一样的方法进行处理函数
const promise = new Promise(function(resolve, reject) { // ... some code if (/* 异步操做成功 */){ resolve(value); } else { reject(error); } }); promise .then( ()=>{ console.log('成功的回调'); }, ()=>{ console.log('失败的回调'); }, ); console.log('主线程执行完了'); /**** 等同于 ****/ const promise = new Promise((resolve, reject)=>{ /* resolve 解决 成功 将 Promise 对象的状态 由初始化变成成功 reject 拒绝 失败 将 Promise 对象的状态 由初始化变成失败 Promise 三种状态 初始化状态 成功状态 失败状态 */ setTimeout(function(){
const result = 202; console.log('请求成功了'); resolve(result); // 触发成功的回调 }, 1000); }); promise.then(result=>{ console.log('成功的回调'+result); }).catch((result)=>{ console.log('失败的回调'+result); }); console.log('主线程执行完了');
/**** 简单 独立异步任务 ****/ const a = new Promise((resolve, reject)=>{ setTimeout(function(){ resolve("成功!"); }, 1000); }); const aa = new Promise((resolve, reject)=>{ setTimeout(function(){ resolve("成功!"); }, 2000); }); const aaa = new Promise((resolve, reject)=>{ setTimeout(function(){ resolve("成功!"); }, 3000); }); Promise.all([a, aa, aaa]).then(result=>{ console.log(result); // 接收到数组是 每一个 Promise 发送过来的结果 }).catch(result=>{ console.log(result); }); console.log('主线程执行完了!'); /**** 复杂 分线程关联任务 ****/ const b = new Promise((resolve, reject)=>{ setTimeout(function(){ console.log("Done1"+"First"); resolve("Done1"+"First"); }, 1000); }); b.then(result=>{ return new Promise((resolve, reject)=>{ setTimeout(function(){ console.log("Done2"+result); resolve("Done2"+result); }, 2000); }); }).catch() .then(result=>{ return new Promise((resolve, reject)=>{ setTimeout(function(){ console.log("Done3"+result); resolve("Done3"+result); }, 3000); }); }).catch() .then(result=>{ console.log("All Done!"+result); }).catch() console.log('主线程执行完了!');