首页 > 其他分享 >使用Promise改造封装好的AJAX

使用Promise改造封装好的AJAX

时间:2023-03-30 14:14:21浏览次数:37  
标签:HTTP const url ABOUT AJAX Promise ERROR 封装 export

使用Promise改造封装好的AJAX

修改index.js

import Ajax from 'ajax.js';
import { ERROR_ABOUT } from './封装AJAX4';
import { ERROR_TIMEOUT } from './封装AJAX4';
import { ERROR_REQUESTE } from './封装AJAX4';
import { ERROR_HTTP_CODE } from './封装AJAX4';

const ajax = (url,option) => {
    //return new Ajax(url,option).getXHR();
    let xhr;
    const p = new Promise((resolve,reject) => {
        xhr = new Ajax(url,{
            ...option,
            ...{
                success(response){
                    resolve(response);
                },
                httpCodeError(status){
                    reject({
                        type: ERROR_HTTP_CODE,
                        text:'${ERROR_HTTP_HTTP_CODE_TEXT}:{status}'
                    });
                },
                error(){
                    reject({
                        type: ERROR_REQUESTE,
                        text:ERROR_REQUESTE_TEXT
                    });
                },
                abort(){
                    reject({
                        type: ERROR_ABOUT,
                        text:ERROR_ABOUT_TEXT
                    });
                },
                timeout(){
                    reject({
                        type: ERROR_TIMEOUT,
                        text:ERROR_TIMEOUT_TEXT
                    });
                },
            }
        }).getXHR();
    });
    p.xhr=xhr;
    p.ERROR_HTTP_CODE=ERROR_HTTP_CODE;
    p.ERROR_REQUESTE=ERROR_REQUESTE;
    p.ERROR_TIMEOUT=ERROR_TIMEOUT;
    p.ERROR_ABOUT=ERROR_ABOUT;

    return p;
};

const get = (url,option) => {
    return new ajax(url,{...option,method:'GET'});
}; 

const getJSON = (url,option) => {
    return new ajax(url,{...option,method:'GET',responseType:'json'});
};   

const POST = (url,option) => {
    return new ajax(url,{...option,method:'POST'});
};   

export {ajax,get,getJSON,POST};

 

修改defaults.js

export const HTTP_GET = 'GET';
export const CONTENT_TYPE_FROM_URLENCODED='application/x-www-form-urlencoded';
export const CONTENT_TYPE_JSON='application/json';

export const ERROR_HTTP_CODE=1;
export const ERROR_HTTP_CODE_TEXT='HTTP状态码异常';

export const ERROR_REQUESTE=2;
export const ERROR_REQUEST_TEXT='请求被阻止';

export const ERROR_TIMEOUT=3;
export const ERROR_TIMEOUT_TEXT='请求超时';

export const ERROR_ABOUT=2;
export const ERROR_ABOUT_TEXT='请求终止';

 

新建html

  

使用Promise改造封装好的AJAX.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8"/>
        <title>使用Promise改造封装好的AJAX</title>

    </head>
    <body>
        <script type="module">
            import {ajax,get,getJSON,post}
            from '../封装AJAX3';

            const url = 'https://www.imooc.com/api/http/search/suggest?wirds=js';

            const p = getJSON(url,{
                params:{username:'alex'},
                data:{age:18},
            });

            const{ ERROR_HTTP_CODE,ERROR_REQUESTE,ERROR_TIMEOUT,ERROR_ABOUT}=p;
            p.then(Response=>{
                console.log(Response);
            }).catch(err=>{
                //console.log(err);
                switch(err.type){
                case ERROR_HTTP_CODE:
                    console.log(err.text);
                    break;
                    case ERROR_REQUESTE:
                    console.log(err.text);
                    break;
                    case ERROR_TIMEOUT:
                    console.log(err.text);
                    break;
                    case ERROR_ABOUT:
                    console.log(err.text);
                    break;
                }
            }); 

           
            
        </script>
    </body>
</html>

 

标签:HTTP,const,url,ABOUT,AJAX,Promise,ERROR,封装,export
From: https://www.cnblogs.com/yu3304/p/17272467.html

相关文章

  • element+vue2的查询form表单封装成组件复用
    <template><el-form:inline="true"style="display:flex;flex-direction:row;flex-wrap:wrap;flex:1;"class="formClass"label-width="90px......
  • 封装
    封装封装的定义封装就是把抽象出来的数据[属性]和对数据的操作[方法]封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作[方法],才能对数据进行操作封装的好......
  • 1.封装PageHelper实现分页
    前言这几天想着动手将一些技术融合到项目中,昨天思考了会儿,想起了我与亲戚的对话:我说:“我想将若依项目完整的实现一遍”,亲戚给我反馈到“你没必要完整复现若依项目,而且......
  • 拼多多商品列表接口,关键词搜索拼多多商品接口,拼多多优惠券接口代码封装教程
    业务场景:作为全球最大的B2C电子商务平台之一,拼多多平台提供了丰富的商品资源,吸引了大量的全球买家和卖家。为了方便开发者接入拼多多平台,拼多多平台提供了丰富的API接口......
  • el-upload批量图片上传封装
    需求:实现图片一次性上传  调一次接口 子组件<template><divclass="uploadDiv"><el-uploadref="upload"action="#"list-type="p......
  • 面向对象和面向过程(封装继承多态)
    面向对象&面向过程面向过程思想步骤清晰,第一步做什么第二步做什么面对过程适合处理一些简单的问题面向对象思想物以类聚,分类的思维模式对于描述复杂的事物,为了从......
  • JavaScript Promises, async/await
    JavaScriptPromises,async/await这篇博客不是讲如何使用Promise,是一个学习总结。是我自己对Promise的理解。newPromise()的时候,传一个executor给Promise.......
  • vue 软键盘组件封装
    场景和需求1软键盘固定2多输入框共用一个组件,聚焦切换时操作对象自动切换3根据光标在输入框的位置进行相应的输入和删除操作4点击软键盘时保存输入框光标活跃5输......
  • 2-1初始Ajax|2-2.2-5Ajax基本用法|2-7GET请求|2-8POST请求
    什么是AjaxAjax即AsynchronousJavascriptAndXML(异步JavaScript和XML)在2005年被JesseJamesGarrett提出的新术语,用来描述一种使用现有技术集合的‘新’方法,......
  • TS+Vue3+Echarts的封装与使用
    TS+Vue3+Echarts的组件封装步骤如下统计分析页面使用栅格布局进行规划     抽离组件分别包括数字面板组件count-card,统计面板组件chart-card及特定图......