一.Promise的做用是什么? 当有多个请求之间有相互依赖关系(紧接着的请求须要上一次请求的返回结果),这时promise的做用就凸显出来了。
二.如何使用promise?javascript
new Promise(function(resolve,reject){ 1.处理语句 if(处理成功){ resolve([参数]); }else{ reject([参数]); } });
三.promise的两个原型方法(对方方法) then(),catch() 1.当前promise对象标志成resolve状态时,调用 then(function([参数]){处理语句})
2.当前promise对象标志成reject状态时,调用catch(function([参数]){处理语句})
四.Promise.all() : 静态方法 当all中所有promise对象标志成resolve时,当前对象才返回resolve状态,不然,只有一个返回reject状态,当前对象返回reject状态php
//判断信息为true时,输出hello false时,输出bye function fn(msg){ //建立promise对象 let pm = new Promise(function(resolve,reject){ //resolve:表示成功的状态,reject:表示失败的状态 if(msg){ resolve(); //标志成功 }else{ reject(); //标志失败 } }); return pm; } var p = fn(1); //p接收的是调用函数后返回的promise对象 p.then(function(){ alert('hello'); }); p.catch(function(){ alert('bye'); });
加载一张图片html
//建立一个数组,存放图片地址 const arrImgs = ['img/0.jpg','img/1.jpg','img/2.jpg']; //加载图片 function loadImg(src){ return new Promise(function(resolve,reject){ //处理加载图片的过程 //Image 建立img对象 var img = new Image(); //document.createElement('img'); img.src = src; //给img对象添加src属性 img.onload = function(){ resolve(this); } //错误事件 img.onerror = function(){ reject(new Error('图片加载失败!')); } }); } var oP = loadImg(arrImgs[1]); oP.then(function(img){ document.body.appendChild(img); //当浏览器加载图片成功后,将图片放到页面中。 }).catch(function(err){ console.log(err); })
解决ajax依赖导入的问题
从内容中获取地址java
//获取页面元素 let oBtn = document.getElementById("btn"); let oDiv = document.getElementById("box"); oBtn.onclick = function(){ new Promise(function(resolve,reject){ ajax.get('1.txt',function(data){ resolve(data); }) }).then(function(data){ return new Promise(function(resolve,reject){ ajax.get(data,function(str){ resolve(str); }) }) }).then(function(data){ ajax.get(data,function(str){ oDiv.innerHTML = str; }) }) }
==经过对象调用的方法==是对象方法;
==经过构造函数调用的方法==是静态方法. //Math
string.fromCharCode()ajax
//经过对象调用的方法,称为对象方法 //经过构造函数调用的方法,称为静态方法 Math String.fromCharCode() const arrImgs = ['img/0.jpg','img/1.jpg','img/2.jpg']; function loadImg(src){ //建立Promise对象 return new Promise(function(resolve,reject){ let img = document.createElement('img'); img.src = src; img.onload = function(){ resolve(this); } img.onerror = function(){ reject('图片加载失败!'); } }) } //Promise.all([]) :数组中返回的promise对象所有是resolve状态时,当前的promise对象都是resolve状态;只要有一个返回的是reject,当前的promise对象就是reject状态。 let oP = Promise.all([loadImg(arrImgs[0]),loadImg(arrImgs[7]),loadImg(arrImgs[2])]); oP.then(function(imgs){ imgs.forEach(function(value){ document.body.appendChild(value); }) }).catch(function(str){ console.log(str); })
jsonp 掌握其思想 src属性:具备跨域的特色json
<html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <input type="text" name="txt" id="txt" value="" /> <ul id='ul1'></ul> <script type="text/javascript"> //src属性:具备跨域的特色 //https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=aaaa&cb= let otxt = document.getElementById("txt"); let oUl = document.getElementById("ul1"); otxt.onkeyup = function(){ //建立script标签 let sc = document.createElement('script'); //设置src属性 sc.src = "https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=" + this.value + "&cb=fn"; document.getElementsByTagName('head')[0].appendChild(sc); } function fn(data){ // console.log(data); var arr = data.s; for(var i = 0,len = arr.length;i < len;i ++){ let li = document.createElement('li'); li.innerHTML = arr[i]; oUl.appendChild(li); } } </script> </body> </html>
转载于猿2048:➬《20、promise与ajax jsonp》跨域