ajax-promise-async-try/catch

简介: ajax-promise-async-try/catch

ajax-promise-async-try/catch


发起一个ajax请求

image.png

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封装

image.png

//调用登录接口
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

image.png

 async function fn(){
    console.log('程序开始')
    let data = await myPromise(method:'';url:'',data:'')
    console.log('程序结束')
  }


try/catch

try{
// 可能出现异常的代码
}catch(error){
// 抛出异常
}
相关文章
|
前端开发
promise中reject和catch处理上有什么区别
promise中reject和catch处理上有什么区别
171 0
|
7月前
|
前端开发 JavaScript API
【面试题】面试官:为什么Promise中的错误不能被try/catch?
【面试题】面试官:为什么Promise中的错误不能被try/catch?
|
前端开发 JavaScript API
📕重学JavaScript:Promise 的then()、catch() 和 finally()
大部分时候,你要用的 Promise 对象是 Web API 或第三方 API 返回的。我们要设置 Promise 对象,让它在变成 fulfilled 的时候执行我们想要的成功的代码,而在变成 rejected 的时候执行我们想要的失败的代码。
384 0
📕重学JavaScript:Promise 的then()、catch() 和 finally()
|
前端开发 JavaScript
web前端面试高频考点——JavaScript 篇(二)【JS 异步进阶】Event Loop、then 和 catch、async/await、宏任务微任务、手撕 Promise 源码
web前端面试高频考点——JavaScript 篇(二)【JS 异步进阶】Event Loop、then 和 catch、async/await、宏任务微任务、手撕 Promise 源码
177 0
|
监控 前端开发
Promise的九大方法(resolve、reject、then、catch、finally、all、allSettled、race、any)你都用过那些?
Promise的九大方法(resolve、reject、then、catch、finally、all、allSettled、race、any)你都用过那些?
|
前端开发
Promise源码解密-catch/resolve/reject/race
Promise源码解密-catch/resolve/reject/race
|
前端开发
promise对象及then与catch的返回值实践
一、简介 (1)将异步操作的写法写成了同步的。并没有真正将异步变成同步,而是将异步回调函数的写法写成了同步的写法,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易。
2861 0
|
7月前
|
前端开发 JavaScript
如何处理 JavaScript 中的异步操作和 Promise?
如何处理 JavaScript 中的异步操作和 Promise?
68 1
|
7月前
|
前端开发 JavaScript
在JavaScript中,什么是promise、怎么使用promise、怎么手写promise
在JavaScript中,什么是promise、怎么使用promise、怎么手写promise
105 4
|
7月前
|
前端开发 JavaScript 开发者
JavaScript 中的异步编程:Promise 和 Async/Await
在现代的 JavaScript 开发中,异步编程是至关重要的。本文将介绍 JavaScript 中的异步编程概念,重点讨论 Promise 和 Async/Await 这两种常见的处理异步操作的方法。通过本文的阐述,读者将能够更好地理解和应用这些技术,提高自己在 JavaScript 开发中处理异步任务的能力。