ES6——Promise
-
-
异步,操作之间没有关系,同时执行多个操作, 代码复杂
-
同步,同时只能做一件事,代码简单
-
-
Promise 对象
-
用同步的方式来书写异步代码
-
Promise 让异步操作写起来,像在写同步操作的流程,不必一层层地嵌套回调函数
-
改善了可读性,对于多层嵌套的回调函数很方便
-
充当异步操作与回调函数之间的中介,使得异步操作具备同步操作的接口
-
-
Promise 也是一个构造函数
-
接受一个回调函数f1作为参数,f1里面是异步操作的代码
-
返回的p1就是一个 Promise 实例
-
所有异步任务都返回一个 Promise 实例
-
Promise 实例有一个then方法,用来指定下一步的回调函数
let p1 = new Promise(function(resolve, reject){ // 异步代码 resolve 成功了 reject 失败了 // $.ajax() 执行异步 AJAX 请求 $.ajax({ url: '10-arr.txt', //规定发送请求的 URL。默认是当前页面。 dataType:'json',//预期的服务器响应的数据类型。 success(arr){ resolve(arr); }, error(err){ reject(err); } }) }); p1.then(function(arr){ console.log('成功了'+arr); },function(err){ console.log('失败了'+err); });
let p1 = new Promise(function(resolve, reject){ $.ajax({ url: '10-arr.txt', dataType:'json', success(arr){ resolve(arr); }, error(err){ reject(err); } }) }); let p2 = new Promise(function(resolve, reject){ $.ajax({ url: '10-arr1.txt', dataType:'json', success(arr){ resolve(arr); }, error(err){ reject(err); } }) }); Promise.all([ p1,p2 ]).then(function(arr){ let [res1, res2] = arr; alert('全成功了'); alert(res1); alert(res2); },function(){ alert('至少有一个失败了'); }); // 失败!!!!!!!!!!!!!
function createPromise(url){ return new Promise(function(resolve, reject){ $.ajax({ url, dataType:'json', success(arr){ resolve(arr); }, error(err){ reject(err); } }) }); } Promise.all([ createPromise('10-arr.txt'), createPromise('10-arr1.txt') ]).then(function(arr){ let [res1, res2] = arr; alert('全成功了'); alert(res1); alert(res2); },function(){ alert('至少有一个失败了'); }); // 失败!!!!!!!!!!!!!
Promise.all([ $.ajax({url:'10-arr.txt',dataType:'json'}), $.ajax({url:'10-arr1.txt',dataType:'json'}) ]).then(function(results){ let [arr,json] = results; alert('成功了'); console.log(arr.json); },function(){ alert('失败了'); });
-