1.1.1 • Published 7 years ago

iterate79 v1.1.1

Weekly downloads
4
License
MIT
Repository
github
Last release
7 years ago

iterate79

A Simple JavaScript Iterator.

Install

$ npm install --save iterate79

Usage

配列を直列処理する

var it79 = require('iterate79');
it79.ary(
	[
		'one',
		'two',
		'three'
	] ,
	function(it, data, idx){
		console.log(data);// <- 'one', next 'two', next 'three'
		console.log(idx);// <- 0, next 1, next 2
		setTimeout(function(){
			it.next();
		}, 100);
	},
	function(){
		console.log('done!');
	}
);

オブジェクト(連想配列)を直列処理する

var it79 = require('iterate79');
it79.ary(
	{
		'one': 1,
		'two': 2,
		'three': 3
	} ,
	function(it, data, idx){
		console.log(data);// <- 1, next 2, next 3, ...
		console.log(idx);// <- 'one', next 'two', next 'three', ...
		setTimeout(function(){
			it.next();
		}, 100);
	},
	function(){
		console.log('done!');
	}
);

配列から複数件ずつ並列処理する(bundle機能)

var it79 = require('iterate79');
it79.ary(
	{
		'one': 1,
		'two': 2,
		'three': 3,
		'four': 4,
		'five': 5,
		'six': 6,
		'seven': 7,
		'eight': 8
	} ,
	3, // 3件ずつ並行処理する
	function(it, data, idx){
		it.next();
	},
	function(){
		console.log('done!');
	}
);

配列の直列処理を中断する

var it79 = require('iterate79');
it79.ary(
	{
		'one': 1,
		'two': 2,
		'three': 3,
		'four': 4,
		'five': 5,
		'six': 6,
		'seven': 7,
		'eight': 8
	} ,
	function(it, data, idx){
		setTimeout(function(){
			if( idx == 'five' ){
				it.break() // 'five' のときに中断し、その後の処理は実行しない
			}else{
				it.next();
			}
		}, 100);
	},
	function(){
		console.log('done!');
	}
);

関数を直列処理する

var it79 = require('iterate79');
it79.fnc(
	{} , // <- initial value of `arg`.
	[
		function(it, arg){
			console.log(arg.test); // <- undefined
			arg.test = 1;
			it.next(arg);
		},
		function(it, arg){
			console.log(arg.test); // <- 1
			arg.test = 2;
			it.next(arg);
		},
		function(it, arg){
			console.log(arg.test); // <- 2
			it.next();
		}
	]
);

関数の直列処理で連想配列のキーを指定してジャンプする

var it79 = require('iterate79');
it79.fnc(
	{} , // <- initial value of `arg`.
	{
		'fnc1': function(it, arg){
			arg.test = 1;
			it.goto('fnc3', arg); // fnc2 をスキップして fnc3 へ進む
		},
		'fnc2': function(it, arg){
			arg.test = 2; // この関数はスキップされる
			it.next(arg);
		},
		'fnc3': function(it, arg){
			console.log(arg.test); // <- 1
			it.next(arg);
		}
	}
);

関数の直列処理を中断する

function( callback ){
	var it79 = require('iterate79');
	it79.fnc(
		{} , // <- initial value of `arg`.
		{
			'fnc1': function(it, arg){
				arg.test = 1;
				callback();
				it.break(); // ここで中断。fnc2以降は実行されない。
			},
			'fnc2': function(it, arg){
				arg.test = 2; // この関数はスキップされる
				it.next(arg);
			},
			'fnc3': function(it, arg){
				arg.test = 3; // この関数はスキップされる
				callback();
			}
		}
	);
}

キューを処理する

var it79 = require('iterate79');
var queue = new it79.queue({
	'threadLimit': 3 , // 並行処理する場合のスレッド数上限
	'process': function(data, done, queryInfo){
		// キュー1件あたりの処理
		console.log('---- process:', data);
		setTimeout(function(){
			done(); // callback
		}, 100);
	}
});
var queueItemId1 = queue.push({"queueData": "Queue 1"});
var queueItemId2 = queue.push({"queueData": "Queue 2"});
var queueItemId3 = queue.push({"queueData": "Queue 3"});
var queueItemId4 = queue.push({"queueData": "Queue 4"});
var queueItemId5 = queue.push({"queueData": "Queue 5"});

// Removing Queue Item
console.log( queue.remove(queueItemId3) );

// Updating Queue Item
console.log( queue.update(queueItemId4, {"queueData": "Queue 4 updated"}) );

// Checking Queue Item Status
console.log( queue.checkStatus(queueItemId5) );
    // This returns `waiting`, `progressing`, `removed`, or `undefined`.

result...

true
true
waiting
---- process: { queueData: 'Queue 1' }
---- process: { queueData: 'Queue 2' }
---- process: { queueData: 'Queue 4 updated' }
---- process: { queueData: 'Queue 5' }

Change log

iterate79@1.1.1 (2017-10-27)

  • queue.update() を追加。
  • queue.remove() を追加。
  • 新しい状態 removed を追加。

iterate79@1.1.0 (2017-10-16)

  • 新しいAPI it79.queue() を追加。

iterate79@1.0.0 (2016-11-20)

  • ary() に、 bundle機能を追加。複数件ずつ並列して処理するオプション。
  • ary() に、 it.break() を追加。配列の直列処理を途中で抜けられるようになった。
  • fnc() で、 連想配列に格納された関数群を直列処理できるようになった。
  • fnc() に、 it.goto() を追加。関数の添字を指定してジャンプできるようになった。
  • fnc() に、 it.break() を追加。関数の直列処理を途中で抜けられるようになった。

iterate79@0.1.0 (2016-09-05)

  • stack overflow が起きることがある不具合を修正。

iterate79@0.0.1 (2015-08-20)

  • initial release.

License

MIT License.

Author

Tomoya Koyanagi (@tomk79)