Лучшая идея управления, которую я видел для нескольких функций aysnc, - это Deferreds и Futures, как описано в этой статье Script Junkie , этой статье о реализации FutureJS , this MSDN статья и этот вопрос переполнения стека .
На самом деле это структурированный способ думать о последовательности нескольких асинхронных вызовов или об определении зависимостей между ними, и кажется, что есть тяга к реализации нескольких реализаций (уже используемых) для различных сред, так что кажется, что это общепринятая идея, которая будет полезна учиться и сейчас, и в будущем.
Управление несколькими асинхронными вызовами с зависимостями между ними действительно очень сложное занятие. Код не только выглядит грязно, но его невозможно прочитать, а еще более невозможно использовать отладчик. Отладка обычно требует выгрузки большого количества информации в файл журнала и последующей попытки разобраться в том, что произошло. Если время связано, то вы действительно в беспорядке. В моем последнем проекте единственная область, в которой у меня все еще есть нерешенная ошибка - это какая-то пропущенная зависимость между четырьмя различными асинхронными вызовами при запуске. Я укрепил код, чтобы сделать так, чтобы ошибка почти никогда не возникала, но она еще не исчезла. Следующий шаг - переключиться на использование deferreds и добавить к нему некоторую формальную структуру.
Что касается некоторых больших библиотек, у нас есть jQuery Defereds , YUI3 имеет Async Queue (что менее мощно, чем обычные отсроченные, но полезные), Dojo имеет Отложенный объект и есть несколько отложенных библиотек, которые не привязаны к основной библиотеке.