1.异步请求/异步操作
异步:操作之间没有关系,干扰,可以同时进行多个操作;代码更复杂
同步:同时只能做一件事;代码简单
2.promise——消除异步操作:用同步一样的方式,来书写异步代码
(1)promise本身是一个构造函数,有all,reject,resolve等方法
promise.all
promise.race(race的用法与all一样,只是all是与的关系,必须每一个资源都成功,但race是或的关系,同时读取多个资源哪个先完成就用哪个,只要有一个成功的就可以)
(2)基本大框:
jq下的promise:promsie.all( [ $.ajax(),$.ajax() ] ).then( results=>{//对了},err=>{//错了} )
1 Promise.all({ 2 $.ajax({url:'data/arr.txt',dataType:'json'}), 3 $.ajax({url:'data/json.txt',dataType:'json'}), 4 $.ajax({url:'data/num.txt',dataType:'json'}), 5 }).then(results=>{ 6 let[arr.json,num]=result; 7 alert('成功了'); 8 console.log(arr,json,num); 9 },err=>{ 10 alert('失败了'); 11 })
1 function createPromise(url){//我们用promise的时候一般把它包在一个函数中,在需要的时候去运行这个函数。 2 return new Promise(function(resolve,reject){//我们包装好的函数最后会return出promise对象,也就是说执行这个函数我们会得到一个promise对象//两个参数(回调函数):resolve-异步操作成功,reject-异步操作失败。严格来说resolve是将promise的状态设置为fullfiled,reject是将promise的状态设置为rejected。 3 $.ajax({ 4 url,//url:url,在json中key与value值一样时可省略 5 dataType:'json', 6 sucess(arr){ 7 resolve(arr); 8 }, 9 error(err){ 10 reject(err); 11 } 12 }) 13 }); 14 } 15 promise.all([//把都要执行的函数都放在一个数组里,然后数组以同步的方式一个一个执行,执行结束后能够接着执行then里面的东西 16 createPromise('data/arr.txt'), 17 createPromise('data/json.txt') 18 ]).then(function(arr){//then会拿到我们之前函数中调用resolve时传的参数 19 let [res1,res2]=arr;//结构赋值 20 alert('全部成功了'); 21 alert(res1); 22 alert(res2); 23 },function(){ 24 alert('至少有一个失败了');