ajax-promise-async-try/catch
发起一个ajax请求
function ajax(){ /* 创建对象 */ let xhr = new window.XMLHttpRequest() /* 建立连接 */ xhr.open('get','http://quanzhan.site:3000/swagger/api/tab/1') /* 发送请求 */ xhr.send() /* 响应数据 */ xhr.onreadystatechange = ()=>{ /* 就绪码 */ if(xhr.readyState===4){ /* 状态码 */ if(xhr.status==200){ let data = xhr.responseText console.log(data); } } } }
ajax封装
ajax({ method:'post', url:'http://127.0.0.1:8088/api/login', //参数 data:{ username:'admin', password:123 }, success:function(data){ //成功处理 console.log('成功',data); }, error:function(error){ //失败处理 console.log('失败',error) } }) //处理数据对象 - 转变 - 键值对的形式 function formateParam(data){ let arr = [] //遍历对象的属性 for(let key in data){ //data:{username:'admin',password:123} arr.push(`${key}=${data[key]}`) } return arr.join('&') //'username='admin'&password=123 } function ajax(options){ //1.ajax对象 let xhr = new window.XMLHttpRequest() //2.链接服务器 let params = formateParam(options.data) //3.建立链接 let method = options.method.toUpperCase() //请求方法统一大写 if(method == 'GET'){ xhr.open(method,options.url + '?' + params) xhr.send() }else if(method == 'POST'){ xhr.open(method,options.url) //设置表 xhr.setRequestHeader('content-type','application/x-www-form-urlencoded') xhr.send(params) } //4.处理响应数据 xhr.onreadystatechange = function(){ //就绪 if(xhr.readyState == 4){ //状态 if(xhr.status == 200){ let data = xhr.responseText options.success(data) }else{ options.error('网络请求失败') } } } }
Promise封装
//调用登录接口 myPromise({ url: 'http://127.0.0.1:8088/api/login', method: 'post', data: { username: 'admin', password: 'admin', } }).then(data => { console.log(data); }).catch(err => { console.log(err); }) //工具函数 - 理解 - 基础 function myPromise(options) { return new Promise((resovle, reject) => { const xhr = new window.XMLHttpRequest() let params = formatParmas(options.data) //uid=101 let method = options.method.toUpperCase() if (method == 'GET') { xhr.open(method, options.url + '?' + params) xhr.send() } else if (method == 'POST') { xhr.open(method, options.url) xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded') xhr.send(params) } xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if (xhr.status == 200) { let data = xhr.responseText data = JSON.parse(data) resovle(data) } else { reject('网络请求失败') } } } }) }
promise的方法
Promise.race([promise1,promise2,...]).then(data=>{}) //谁先执行完返回谁的数据 Promise.all([promise1,promise2,...]).then(datas=>{}) //返回全部数据,多个异步任务并发进行 let p = Promise.resolve('成功的结果') p.then(data=>{ //成功的结果 }) let e = Promise.reject('失败结果') e.then(err=>{ //失败结果 })
async/await
async function fn(){ console.log('程序开始') let data = await myPromise(method:'';url:'',data:'') console.log('程序结束') }
try/catch
try{ // 可能出现异常的代码 }catch(error){ // 抛出异常 }