Nodejs学習ノート-非同期プロセス制御

4419 ワード

asyncのインストール


npm install async--gエラー:npm:relocation error:npm:symbol SSL_set_cert_cb, version libssl.so.10 not defined in file libssl.so.10 with link time reference解決方法:yum-y install opensslエラー:Error:Cannot find module'async'解決方法:修正/etc/profile,export NODE_PATH=/usr/lib/node_modules/,source/etc/profile
コード:https://github.com/fengchunjian/nodejs_examples/tree/master/async

クロス実行

//normal.js
function oneFun() {
    ii = 0;
    setInterval(function() {
        console.log("aaa=" + new Date());
        ii++;
        if (ii == 3) {
            clearInterval(this);
        }
    }, 1000);
    console.log("oneFun    ");
}

function twoFun() {
    jj = 0;
    setInterval(function() {
        console.log("bbb=" + new Date());
        jj++;
        if (jj == 3) {
            clearInterval(this);
        }
    }, 1000);
    console.log("twoFun    ");
}

oneFun();
console.log("oneFun  ");
twoFun();
console.log("twoFun  ");
console.log("       ");

シリアル関連なし

//series.js
var async = require("async");

function exec() {
    async.series({
        one : function(done) {
            ii = 0;
            setInterval(function() {
                console.log("aaa=" + new Date());
                ii++;
                if (ii == 3) {
                    clearInterval(this);
                    //done("  ", {one:"one    "});
                    done(null, {one:"one    "});
                }
            }, 1000);
        },
        two : function(done) {
            jj = 0;
            setInterval(function() {
                console.log("bbb=" + new Date());
                jj++;
                if (jj == 3) {
                    clearInterval(this);
                    done(null, {two:"two    "});
                }
            }, 1000);
        }
    }, function(err, rs) {
        console.log(err);
        console.log(rs);
    });
}

exec();
console.log("       ");

並列関係なし

//parallel.js
var async = require("async");

function exec() {
    async.parallel({
        one : function(done) {
            ii = 0;
            setInterval(function() {
                console.log("aaa=" + new Date());
                ii++;
                if (ii == 3) {
                    clearInterval(this);
                    //done("  ", {one:"one    "});
                    done(null, {one:"one    "});
                }
            }, 1000);
        },
        two : function(done) {
            jj = 0;
            setInterval(function() {
                console.log("bbb=" + new Date());
                jj++;
                if (jj == 5) {
                    clearInterval(this);
                    done(null, {two:"two    "});
                }
            }, 1000);
        }
    }, function(err, rs) {
        console.log(err);
        console.log(rs);
    });
}

exec();
console.log("       ");

シリアル関連

//waterfall.js
var async = require("async");

function exec() {
    async.waterfall([
        function(done) {
            ii = 0;
            setInterval(function() {
                console.log("aaa=" + new Date());
                ii++;
                if (ii == 3) {
                    clearInterval(this);
                    done(null, "one    ");
                }
            }, 1000);
        },
        function(preValue, done) {
            jj = 0;
            setInterval(function() {
                console.log(preValue + ", bbb=" + new Date());
                jj++;
                if (jj == 5) {
                    clearInterval(this);
                    done(null, preValue + ", two    ");
                }
            }, 1000);
        }
    ], function(err, rs) {
        console.log(err);
        console.log(rs);
    });
}

exec();
console.log("       ");

補足


シリアル無関連:aaaエラー、bbbはパラレル無関連を実行しません:aaaエラー、bbbは実行を続行しますがコールバックを実行しません

リファレンスドキュメント


nodejs13_非同期フロー制御(n 13_async)http://www.yuankuwang.com/web/index.php?r=respool/resview&rpid=46 node.jsチュートリアル13_ひどうきプロセスせいぎょhttp://edu.51cto.com/center/course/lesson/index?id=124538