UNPKG

olympus-r

Version:

一个力求简单易用的前端开发框架 #### 开发语言 TypeScript #### 核心架构 MVC #### 模块间通讯和解耦 采用事件机制,利用一个全局唯一的事件派发器进行模块间通讯,解耦模块间依赖 #### 表现层结构 使用桥接模式拆分接口与实现,达到一套核心驱动多套表现层的目的(目前支持DOM、Egret、PixiJS三种表现层),同时支持表现层的未来可扩展性 #### TypeScript装饰器注入 框架提供TypeScript装饰器注入功能,便捷获取托管对象。例如:

66 lines (65 loc) 1.7 kB
/** * @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); }