What kind of object is in your list of async operations?
promises. (though probably your own ad hoc, hand rolled and poorly specified version of them)
Because, in the end, what, semantically, is the difference between:
runqueue([func1,func2,func3,func4]); and func1().then(func2).then(func3).then(func4);
No significant difference at all, really. except the promises permit you much more flexibility and options.