Node.js Async

2016, Feb 18    

Merhabalar, Bugün Node.js’de kullanılabilen async modülünden bahsedeceğim. Async modülü 20 civarı asenkron fonksiyon içeriyor fakat bu yazımda sadece 4 tanesini (series, parallel, forever, waterfall) açıklayıp kod örnekleri ile detaylandırmaya çalışacağım.

series: async.series görevlerin olduğu bir dizide her bir görev kendisinden önce gelen tamamlandıysa çalışır. Eğer serideki herhangi bir fonksiyon callback fonksiyonuna hata (error) dönerse kalan fonksiyonlar çalıştırılmaz. series fonksiyonunu birbirine bağlı olan bir dizi görev varsa ve bu görevler bittikten sonra bir işlem yapılması gerekiyorsa kullanmalıyız.

var async = require('async');

var squareOfNumber = function (number, callback) {
    square = number * number;
    console.log(square);
    if (square == 9) callback("error");
    else callback();
    return square;

};

async.series(
    [
        function(callback){
            squareOfNumber(2,callback);
        },function(callback){
            squareOfNumber(3,callback);
        },function(callback) {
            squareOfNumber(4, callback);
        }
    ], function(err){
        if(err){
            console.log(err);
            return err;
        }
    }
);

--Sonuc--
4
9
error

parallel: async.parallel fonksiyonunda dizideki görevler bir öncekinin bitmesini beklemeden çalışır. Bütün görevler bittiğinde yanıtlar final callbacke dizi olarak gönderilir. async.parallel fonksiyonunu birbirine bağlı olmayan bir dizi görev varsa ve bu görevler bittikten sonra bir işlem yapılması gerekiyorsa kullanmalıyız.

var async = require('async');

var squareOfNumber = function (number, callback) {
    square = number * number;
    console.log(square);
    if (square == 9) callback("error");
    else callback();
    return square;

};

async.parallel(
    [
        function(callback){
            squareOfNumber(2,callback);
        },function(callback){
            squareOfNumber(3,callback);
        },function(callback) {
            squareOfNumber(4, callback);
        }
        ], function(err){
        if(err){
            console.log(err);
            return err;
        }
    }
);

--Sonuc--
4
9
error
16

forever: async.forever fonksiyonu asenkron f(n) fonksiyonunu kendisini tekrar çağırmasını sağlayan callback parametresi ile çağırır. Bunu async.series fonksiyonunun sonsuza kadar çalışan hali olarak düşünebiliriz. Eğer callbacke hata gönderilirse çalışma durur.

waterfall: async.waterfall fonksiyonu fonksiyonlardan oluşan bir görev dizisini çalıştırır ve her bir fonksiyon sonucunu dizide bir sonra gelen fonksiyona gönderir. Ama herhangi bir fonksiyon callbackine hata değeri gönderirse sıradaki fonksiyon çağrılmaz ve ana callback hata değeri ile çağrılır. async.waterfall fonksiyonu kendisinden bir önceki fonksiyonun sonucu ile işlemler yapacak işlemler için kullanılır.

var async = require('async');

async.waterfall([
    function(callback) {
        console.log("ilk islem yapildi");
        callback(null, 'dosya');
    },
    function(arg1, callback) {
        console.log(arg1);
        callback(null, 'degisken');
    },
    function(arg1, callback) {
        console.log(arg1);
        callback(null, 'final');
    }
], function (err, result) {
        console.log(result);
});

--Sonuc--
ilk islem yapildi
dosya
degisken
final