Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

iterate79

tomk79106MIT1.1.1

A Simple JavaScript Iterator.

readme

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)