# iterate ```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?'); ```