类似ajax封装函数,JS 封装一个async式的AJAX函数

其实也没什么,就是用上ES7的异步函数,让ajax使用起来更方便。这个方便主要是体现在:无回调 & 无then链式 & 轻松收集异常。

大致分3步:

1、封装API类(这步不用异步函数)

这一步一般会单独建立一个文件!

// 定义一个API类,专门用于获取各类数据

class Api {

// 有的ajax请求是会做鉴权的,constructor里放这些鉴权参数

constructor (token) {

this.token =token;

}

// opt 里存放特定请求需要的参数,如url等

getUser (opt) {

return new Promise((resolve, reject) => {

$.ajax({

headers:{

token:this.token

},

url:opt.url,

data:opt.data,

success:function(data){

resolve(data);

},

error:function(error,status){

reject(error);

}

})

})

}

//其他API定义区

...

}

2、进一步封装特定API(使用异步函数)

这一步一般是在特定的需要调用某API时用到

// const api = new Api(token)一般会提前执行,比如在vue组件script的import和export default之间执行,这也是为了避免该语句在每个具体api里都执行一次。

// 在vue中,可以将该函数放在methods里

async function loadUserData (opt) {

try{

const user = await api.getUser(opt);

// 根据user状态执行业务逻辑

...

}catch(e){

// 请求异常的处理逻辑

}

}

第三步:使用API

// 在vue中,可以将该代码放在mounted里

loadUserData(opt)

经过这三步,基本就实现了无回调,无then链式调用和轻松处理错误这几个比较烦人的问题啦!

参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438670.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

11单件模式(Singleton Pattern)

创建型模式---单件模式(Singleton Pattern)动机(Motivation): 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。 如何绕过常规的构造器,…

查找字符位置_如何使用find函数和search函数精确查找字符

精确查找指定字符在一个字符串中的位置是Excel函数运用中的一项重要的技巧,尤其是在截取字符串、替换字符串等文本处理过程中,精确定位技术更是必不可少。查找字符的主要函数是find函数和search函数,两者的语法完全相同。find(find_text,with…

梦幻新开服务器维护,梦幻西游1月新区2017 1月新开服务器介绍

梦幻西游1月新区2016有什么呢,这个月的新开服务器已经出来了,很多朋友已经邀上自己的小伙伴们开战了,有的还没放假就等着下个月的新区了,下面我们就来看。梦幻西游1月新区2016:转眼步入2016年,在2016年1月份…

12抽象工厂(Abstract Factory)

常规的对象创建方法: //创建一个Road对象 Road road new Road(); new 的问题: 实现依赖,不能应对“具体实例化类型”的变化。解决思路: 封装变化点-----哪里变化,封装哪里 潜台词: 如果没有变…

typeahead有什么作用_typeahead使用配置参数。

示例代码:var suggestion_source new Bloodhound({datumTokenizer: Bloodhound.tokenizers.obj.whitespace("display_name"),queryTokenizer: Bloodhound.tokenizers.whitespace,remote: {url: "http://nominatim.openstreetmap.org/search?format…

dhcp服务器能为客户端提供哪些信息,为DHCP客户端提供DHCP服务器的MAC [关闭]

Background info:我有一套专有的嵌入式Linux网络设备,其中一个将配置为DHCP服务器,其余的将是DHCP客户端 .我需要让客户端设备只接受来自服务器设备的DHCP租约,忽略同一LAN上其他DHCP服务器提供的任何其他租约 . 同样,我需要使服务…

13建造者模式(Builder)

Builder模式的缘起: 假设创建游戏中的一个房屋House设施,该房屋的构建由几部分组成,且各个部分富于变化。如果使用最直观的设计方法,每一个房屋部分的变化,都将导致房屋构建的重新修正.....动机(Motiva…

mongo更新数组字段_更新mongodb中嵌套数组中的几个字段(使用pymongo)

我正在尝试更新数组内数组中的一些字段示例文档如下:{id: 987654321tweets: [{text: "RT 947FreshFM: A vigil will be held for #SandyHook victims at UMd. at 7pm at Nyumburu Ampitheater. BlackTerp",urls: [],id: 279718351289348100},{text: "…

15原型模式(Prototype)

依赖关系倒置: 动机(Motivate): 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。 如何应对这种变化?如何向“客户…

安装mlxtend_python机器学习包mlxtend的安装和配置详解

今天看到了mlxtend的包,看了下example集成得非常简洁。还有一个吸引我的地方是自带了一些data直接可以用,省去了自己造数据或者找数据的处理过程,所以决定安装体验一下。依赖环境首先,sudo pip install mlxtend 得到基础环境。然后…

14工厂方法模式(Factory Method)

耦合关系: 动机(Motivation): 在软件系统中,由于需求的变化,"这个对象的具体实现"经常面临着剧烈的变化,但它却有比较稳定的接口。 如何应对这种变化呢?提供一种封装机制来隔离出"这个易…

mysql 更新错误1062_mysql 出现1062错误怎么办

mysql 出现1062错误的解决办法:首先打开mysql的配置文件【my.cnf】;然后在client和mysqld下面加上相关代码;最后存关闭后重启mysql即可。mysql 出现1062错误的解决办法:两个instance的版本接近,猜测不是版本问题。执行…

21适配器模式(Adapter Pattern)

适配(转换)的概念无处不在...... 适配,即在不改变原有实现的基础上,将原先不兼容的接口转换为兼容的接口。 例如:二转换为三箱插头,将高电压转换为低电压等。 动机(Motivate): 在软件系统中&#…

mysql命令书写顺序_MySQL SQL语句书写顺序和执行顺序

SQL语句书写顺序和执行顺序(7) SELECT(8) DISTINCT (1) FROM (3) JOIN (2) ON (4) WHERE (5) GROUP BY (6) HAVING (9) ORDER BY (10) LIMIT 书写顺序从上向下依次书写,即:SELECT →FROM → JOIN → ON → WHERE → GROUP BY → HAVING → ORDER BY→ LI…

22桥接模式(Bridge Pattern)

动机(Motivate): 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度…

mysql动静分离_haproxy的web服务负载均衡、动静分离、 MySQL服务负载均衡、状态监控...

实验环境:基于centos6.6haproxy-Server:172.16.249.98 hostname:node1upsteram server1:172.16.249.100 hostname:node2upstream server2:172.16.249.99 hostname:node3web服务的负载均衡以及状态监控:设置记录hapro…

24组合模式(Composite Pattern)

动机(Motivate): 组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。意图(Intent): 将对象组合…

mysql二进制日志被删除无法启动_mysql二进制日志文件出错导致mysql服务无法启动...

今天打开phpmyadmin发现连不上mysql数据库,重启mysql启动不起来,查看日志发现如下错误mysqld: File .\mysql-bin.000370 not found (Errcode: 2)141120 13:23:13 [ERROR] Failed to open log (file .\mysql-bin.000370, errno 2)141120 13:23:13 [ERROR]…

kafka mysql事务_【干货】Kafka 事务特性分析

特性背景消息事务是指一系列的生产、消费操作可以要么都完成,要么都失败,类似数据库的事务。这个特性在0.10.2的版本是不支持的,从0.11版本开始才支持。华为云DMS率先提供Kafka 1.1.0的专享版服务,支持消息事务特性。支持事务消息…

23装饰模式(Decorator Pattern)

子类复子类,子类何其多 假如我们需要为游戏中开发一种坦克,除了各种不同型号的坦克外,我们还希望在不同场合中为其增加以下一种或多种功能;比如红外线夜视功能,比如水陆两栖功能,比如卫星定位功能等等。 按类继承的作法…