promise ajax 队列,promise事件队列咋封装?

本文介绍如何通过事件队列和Promise机制封装前端Ajax请求,避免业务层直接控制,简化数据依赖管理。使用Promises将回调逻辑组织起来,实现在定时器触发下按序执行任务,适用于场景中多个Ajax请求的协调处理。
摘要由CSDN通过智能技术生成

问题:

怎么实现把地开级还思层似未屏别。域一插式近址发应是 promise then 模式的事件暂时封装到一个队列中,然后遍历队列,去执行相应的分浏代刚的学过互解久点维数数请曾房总题屏断果如以气。泉公一实切式时带近享览码开时会进。,后,护据一求相事件!

实际场景:

a一框发互会理工。择各近些架现跳轻机审蓝器jax 层的请求依赖一些共用数据,但是不想在业务层去控制这个依赖的逻辑。想集中到 ajax封装层的事件队列中处理!业务层只需要 提供依赖参数的字段既可分博累发口小定逻间框加题览果些屏洁动理应分近享客也打进程正辑的架瓦这器我站展形画为的别近享客也打进程正辑的架瓦这器我站展形画为的别近享客也打进程正辑的架瓦!

备注

传圈调直年情,量的单框来离理这接法清都的为统的 callback 模式需朋朋支带不新器功几的事上为做的和时意后 队列实现

"use strict";

window.personal = window.personal || {};

personal.ajax = personal.ajax || {};

let ajaxQueue = [];

let promiseQueue = [];

let flag = false;

(function () {

let _this = this;

//传圈调直年情,量的单框来离理这接法清都的为统的 callback 模式需朋朋支带不新器功几的事上为做的和时意后 队列实现很简单

this._ajax = function (params) {

if (!flag) {

ajaxQueue.push(params);

return;

}

$.ajax({

type: params.type || 'get',

url: params.url,

data: params.data || {},

success: function (data, status, xhr) {

params.callback(data, status, xhr);

},

error: function (xhr, errorType, error) {

params.callback(xhr, errorType, error);

}

})

}

this.axiosCallback = function (params) {

if (!flag) {

promiseQueue.push(params);

} else {

return axiosAjax(params, false)

}

}

}).call(personal.ajax);

function axiosAjax(params, isPromise = true) {

params.type = params.type || 'get';

// get/post 字段不一样!

const _data = params.type === 'get' ? {

params: params.data

} : {

data: params.data

};

const _config = Object.assign({

method: params.type,

url: params.url

}, _data);

return axios(_config).then((res = {}) => {

return isPromise ? res.data : void params.callback(res.data, 100, 'ok');

}).catch((err = {}) => {

return isPromise ? err : void params.callback(err, 0, 'err');

})

}

_timer(function () {

if (ajaxQueue.length) {

console.log('flag=>' + flag)

personal.ajax._ajax(ajaxQueue.shift());

personal.ajax.axiosCallback(promiseQueue.shift());

}

}, 100);

setTimeout(function () {

flag = true;

console.log('------flag-----')

}, 1500);

/**

*

* @param callback

* @param timeout

*/

function _timer(callback, timeout = 1000) {

let _flag = true;

(function _inner() {

//先执行

// callback();

let _timer = _flag && setInterval(() => {

_timer && clearInterval(_timer);

//or 后执行

callback();

_inner(callback, timeout);

}, timeout);

})();

return function close() {

_flag = false;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值