iterate

snippet.javascript
'use strict';
 
 
var data = [1,2,3,4];
 
function iterate(elements, element_cb, done_cb) {
    var current_element = elements.shift();
    if (!current_element) {
        return setImmediate(done_cb);
    }
 
    setImmediate(element_cb, current_element, function (err) {
        if (err) {
            return setImmediate(done_cb, err);
        }
 
        setImmediate(iterate, elements, element_cb, done_cb);
    });
}
 
 
iterate(data, function (element, done) {
    console.log('element: ', element);
 
    done();
}, function (err) {
    if (err) {
        console.log('error: ', err);
 
        return;
    }
    console.log('done');
});
 
console.log('asynchronous?');