自己写了一个小工具, 做个备份
支持addTask任务, 每个任务将会同步执行
引用
sync.js
/***
* Sync 框架
*
* 支持 addTask, addCirle, addListener, finish 等功能
*
*/
(function() {
var MAX_TOTAL = Math.pow(2, 31);
function Sync(delay) {
this.delay = delay;
this.queue = []; //执行队列
this.listeners = []; //listeners
this.timer = 0;
this.count = 0; //总的计数
}
Sync.prototype.setDelay = function(delay) {
this.delay = delay;
return this;
}
Sync.prototype.addListener = function(func) {
this.listeners.push(func);
return this;
}
Sync.prototype.removeListener = function(func) {
var pos = this.listeners.indexOf(func)
if (pos != -1) {
this.listeners.splice(pos);
}
return this;
}
Sync.prototype.addTask = function(func, callback) {
this.addCircle(1, func, callback);
return this;
}
Sync.prototype.addParallelTask = function(/** func1, func2, func3... **/) {
this.addCircle(1, function(index) {
for(var i = 0; i < arguments.length; i++) {
var func = arguments[i];
func(index);
}
});
return this;
}
Sync.prototype.addCircle = function(total, func, callback) {
if (typeof(total) == 'function') {
func = total;
total = MAX_TOTAL;
}
this.queue.push({
func : func,
total : total,
index : 0,
callback : callback
});
this.checkStart();
return this;
}
Sync.prototype.checkStart = function(total, func) {
if (this.timer) {
return;
}
var that = this;
this.timer = setTimeout(function() {
var task = that.queue[0];
if (!task) {
that.timer = 0;
return ;
}
var ret = that._execute(task, task.index);
if (ret === true || ++task.index >= task.total) {
that.queue.shift();
that._callback(task);
}
that.timer = setTimeout(arguments.callee, that.delay);
}, this.delay);
}
Sync.prototype._execute = function(task, index) {
var ret = task.func(index);
for(var i = 0; i < this.listeners.length; i++) {
this.listeners[i](this.count++);
}
}
Sync.prototype._callback = function(task) {
task.callback && task.callback(index);
}
Sync.prototype.finish = function(bool) {
if (this.timer) {
clearTimeout(this.timer);
this.timer = 0;
}
if (bool === undefined || bool === true) {
for(var i = 0; i < this.queue.length; i++) {
var task = this.queue[i];
for(var j = task.index; j < task.total; j++) {
var ret = this._execute(task, j);
if (ret === true) {
break;
}
}
}
}
this.queue = [];
}
window.Sync = Sync;
})();
index.htm:
<script src="sync.js"></script>
<script>
var a = new Sync(1000);
a.addListener(function(n){console.log('notify .' + n)});
a.addCircle(2, function(n) {console.log('execute 2 -- ' + n)});
a.addCircle(4, function(n) {console.log('execute 4 -- ' + n)});
a.addCircle(8, function(n) {console.log('execute 8 -- ' + n)});
setTimeout(function() {
a.addCircle(function(n) {console.log('execute n -- ' + n)});
setTimeout(function() {
a.finish();
}, 3000);
}, 3000);
</script>
分享到:
相关推荐
在Web开发的世界里,Backbone.js是一个流行的JavaScript库,用于构建MVC(Model-View-Controller)结构的应用程序。它提供了一种组织代码的方式,使得前端逻辑更加清晰。而`backbone.sync.js`是Backbone的一个关键...
需要同步 基于 AMD 模式的同步模块加载器。 这意味着您可以内联加载内容 - 如果必须的话 - 例如 [removed][removed] [removed] // In AMD you would have had to wrap this in a `... bower install require-sync
sqlite-sync.js 节点模块到 sqlite 同步和异步 node.js 包,用于与SQLite连接数据库,并同步或异步执行 SQL 命令。 安装 npm install sqlite-sync 用法 var sqlite = require ( 'sqlite-sync' ) ; //requiring //...
Knockout.sync.js 是一种扩展,使您可以集中管理并在客户端和后端之间同步视图模型及其所有业务逻辑。 介绍 您想推出新版本的与Viewmodel相关的功能/计算/验证规则,而不必强迫用户重新启动? 客户端可能同时使用多...
"前端开源库-sync.zip"这个压缩包很可能包含了一些常用的前端开发库,这些库可能涵盖了JavaScript、CSS、HTML以及相关的框架和工具。在这里,我们将深入探讨一些常见的前端开源库及其在实际开发中的应用。 1. **...
Ajax-react-sync.zip,通过react高阶组件获取数据的声明性方法,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新加载网页...
Vue.js 是一款轻量级的前端JavaScript框架,由尤雨溪开发并维护,以其易学易用、高性能、灵活的组件系统以及强大的生态系统而受到广大开发者喜爱。本资源"Vue.js前端开发实战-源代码.zip"是针对Vue.js的学习资料,...
Leaflet是一个轻量级、高性能的JavaScript库,专为Web地图开发设计,而ArcGIS则是一个强大的地理信息系统,提供丰富的地图服务。将两者结合,我们可以创建出具有专业特性的地图应用。 首先,让我们了解Leaflet的...
`actions/upload-artifact`(上传构建结果),`actions/download-artifact`(下载构建结果),`actions/github-script`(运行JavaScript脚本与GitHub API交互)等。 6. **安全性和权限**: - 在GitHub Actions中,...
在JavaScript中,polyfill是一种特殊类型的库,它模拟了现代浏览器或新版本Node.js中未在旧环境中实现的API。`execFileSync()` ponyfill是为了在不支持这个方法的老版本Node.js环境中提供相同功能的代码,使得开发者...
Wow.js是javascript动画插件,经常配合animate.css一起使用。动画效果会在元素第一次出现在页面中时起作用。 引入wow.js 在需要使用的元素上添加class=”wow” 使用js初始化
使用npm进行npm install leaflet.sync (和require('leaflet.sync') ),或者只是下载L.Map.Sync.js并在您的html中添加脚本标签。 用法 两张地图。 使用两个地图对象mapA和mapB ,调用mapA.sync(mapB)将mapA.sync...
01-sync-mode.js
Backbone.js是一款轻量级的JavaScript库,专为构建丰富的Web应用程序而设计。它通过提供模型(Models)、视图(Views)、集合(Collections)和路由器(Routers)等核心概念,帮助开发者组织代码并实现MVC(Model-...
return e.d(r,"a",r),r},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="/hls.js/dist/",e(e.s=7)}([function(t,e,r){"use strict";function i(){}function a(t,e){return e="["+t+"] >...
prompt-sync, node.js的同步提示 概要node的同步提示。 非常简单。没有 C 绑定和bash脚本。在 Linux,OS X 和 Windows 上工作。基本模式var prompt = require('prompt-sync')();////
4. **指令与修饰符**:Vue.js提供了丰富的指令(如v-if、v-for、v-bind等)和修饰符(如.sync、.once等),简化了对DOM的操作。 5. **状态管理(Vuex)**:在大型项目中,Vuex通常用于管理组件间的共享状态,保证...
一个聪明的 Node.js Web 框架这个框架的主要目的是约定优于配置,它的灵感来自 Ember.js 或 Ruby On Rails。 它遵循MVC设计模式。 没有更多的依赖项我不喜欢具有数千个依赖项的项目,这就是为什么 Smart 不使用除 ...
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,由 Ryan Dahl 在2009年创建。它让开发者能够在服务器端使用 JavaScript 编程,打破了 JavaScript 仅限于客户端脚本语言的传统定位,极大地扩展了其应用...
完全可用的SmartSync; 支持本地、网络文件夹同步