less than 1 minute read

Sync & Async

  • 동기 방식

    파일의 소유권을 바꾸고, 파일명을 변경, 심볼릭 링크를 만드는 작업을 순차적으로 진행.

    var fs = require('fs');
    
    var oldFilename = './processId.txt';
    var newFilename = './processIdOld.txt';
    
    fs.chmodSync(oldFilename, 777);
    console.log('complete chmod.');
    fs.renameSync(oldFilename, newFilename);
    console.log('complete rename.');
    var isSymLink = fs.lstatSync(newFilename).isSymbolicLink();
    console.log('complete symbolic check.');
    var fs = require('fs');
    
    var oldFilename = './processId.txt';
    var newFilename = './processIdOld.txt';
    
    fs.chmod(oldFilename, 777, function (err) {
        console.log('complete chmod.');
        fs.rename(oldFilename, newFilename, function (err) {
            console.log('complete rename.');
            fs.lstat(newFilename, function (err, stats) {
                var isSymLink = stats.isSymbolicLink();
                console.log('complete symbolic check.');
            });
        });
    });
    
    c:\_dev\_nodejs\nodejs1>node sync-async.js
    complete chmod.
    complete rename.
    complete symbolic check.
    complete chmod.
    complete rename.
    complete symbolic check.
    
  • 비동기 방식

    비동기 방식에서 순차처리는 중첩된 Callback을 이용하여 순서가 보장되게 한다.

    ‘async’ 모듈을 사용하려면 NPM으로 모듈을 설치해야 한다.

    npm install async

Waterfall API를 사용

var fs = require('fs');
var async = require('async');

var oldFilename = './processId.txt';
var newFilename = './processIdOld.txt';

async.waterfall([
    function (cb) {
        fs.chmod(oldFilename, 777, function (err){
            console.log('complete chmod.');
            cb(null);
        });
    },
    function (cb) {
        fs.rename(oldFilename, newFilename, function (err) {
            console.log('complete rename.');
            cb(null);
        });
    },
    function (cb) {
        fs.lstat(newFilename, function (err, stats) {
            var isSymLink = stats.isSymbolicLink();
            console.log('complete symbolic check.');
        });
    }
]);

c:\_dev\_nodejs\nodejs1>node sync-async.js
complete chmod.
complete rename.
complete symbolic check.

ref http://www.nextree.co.kr/p7292/