Не можете ли вы определить функцию, которая работает через массив?
function asyncSequence(callbacks) {
function doAsync() {
async(function() {
if (!callbacks.length) return;
callbacks[0]();
callbacks = callbacks.slice(1);
setTimeout(doAsync, 0);
});
}
doAsync();
}
Затем вы вызываете это с помощью массива функций обратного вызова.
Теперь, если вы хотите запустить все асинхронные обратные вызовы одновременно, то я не вижу проблемы в первую очередь; просто запустите их по мере необходимости. Однако если вам нужно выполнить своего рода «соединение» в конце всех из них, вам придется отслеживать общий статус:
function asyncSequenceConcurrent(callbacks, whenFinished) {
var incomplete = callbacks.length;
for (var i = 0; i < callbacks.length; ++i) {
async((function(i) {
return function() {
callbacks[i]();
incomplete--;
if (!incomplete) {
whenFinished();
}
};
})(i));
}
}