olympus-r
Version:
一个力求简单易用的前端开发框架 #### 开发语言 TypeScript #### 核心架构 MVC #### 模块间通讯和解耦 采用事件机制,利用一个全局唯一的事件派发器进行模块间通讯,解耦模块间依赖 #### 表现层结构 使用桥接模式拆分接口与实现,达到一套核心驱动多套表现层的目的(目前支持DOM、Egret、PixiJS三种表现层),同时支持表现层的未来可扩展性 #### TypeScript装饰器注入 框架提供TypeScript装饰器注入功能,便捷获取托管对象。例如:
66 lines (65 loc) • 1.7 kB
JavaScript
/**
* @author Raykid
* @email initial_r@qq.com
* @create date 2017-09-08
* @modify date 2017-09-08
*
* 同步工具集,用于对多个
*/
var _cache = {};
/**
* 判断是否正在进行操作
*
* @export
* @param {string} name 队列名
* @returns {boolean} 队列是否正在操作
*/
export function isOperating(name) {
var ctx = _cache[name];
return (ctx != null && ctx.operating);
}
/**
* 开始同步操作,所有传递了相同name的操作会被以队列方式顺序执行
*
* @export
* @param name 一个队列的名字
* @param {Function} fn 要执行的方法
* @param {*} [thisArg] 方法this对象
* @param {...any[]} [args] 方法参数
*/
export function wait(name, fn, thisArg) {
var args = [];
for (var _i = 3; _i < arguments.length; _i++) {
args[_i - 3] = arguments[_i];
}
var ctx = _cache[name];
if (ctx == null) {
_cache[name] = ctx = { operating: false, datas: [] };
}
if (ctx.operating) {
// 队列正在执行,推入缓存
ctx.datas.push({ fn: fn, thisArg: thisArg, args: args });
}
else {
// 队列没有在执行,直接执行
ctx.operating = true;
fn.apply(thisArg, args);
}
}
/**
* 完成一步操作并唤醒后续操作
*
* @export
* @param {string} name 队列名字
* @returns {void}
*/
export function notify(name) {
var ctx = _cache[name];
if (ctx == null || ctx.datas.length <= 0) {
// 队列执行完了,直接结束
ctx.operating = false;
return;
}
var data = ctx.datas.shift();
data.fn.apply(data.thisArg, data.args);
}