Как выполнить функцию Javascript только после завершения нескольких других функций?

Моя конкретная проблема заключается в том, что мне нужно выполнить (потенциально) большое количество функций Javascript, чтобы подготовить что-то вроде пакетного файла (каждый вызов функции добавляет некоторую информацию в один и тот же пакетный файл), а затем, после того как все эти вызовы завершены, выполнить Последняя функция для отправки командного файла (скажем, отправить его в виде ответа HTML). Я ищу общий шаблон программирования Javascript для этого.

Обобщить проблему: Учитывая функции Javascript funcA (), funcB () и funcC (), я хотел бы найти лучший способ упорядочить выполнение так, чтобы funcC выполнялся только после того, как funcA и funcB были выполнены. Я знаю, что я мог бы использовать вложенные функции обратного вызова, как это:

funcA = function() {
    //Does funcA stuff
    funcB();
}
funcB = function() {
    //Does funcB stuff
    funcC();
}

funcA();

Я мог бы даже сделать этот шаблон более общим, передав параметры обратного вызова, однако это решение становится довольно многословным.

Я также знаком с цепочкой функций Javascript, где решение может выглядеть так:

myObj = {}
myObj.answer = ""
myObj.funcA = function() {
    //Do some work on this.answer
    return this;
}
myObj.funcB = function() {
    //Do some more work on this.answer
    return this;
}
myObj.funcC = function() {
    //Use the value of this.answer now that funcA and funcB have made their modifications
    return this;
}
myObj.funcA().funcB().funcC();

Хотя это решение кажется мне немного чище, по мере того, как вы добавляете больше шагов к вычислениям, цепочка выполнения функций увеличивается с каждым разом.

Для моей конкретной задачи порядок выполнения funcA, funcB и т. Д. Не имеет значения. Так что в моих решениях выше, я технически выполняю больше работы, чем требуется, потому что я размещаю все функции в последовательном порядке. Все, что для меня важно, - это то, что funcC (некоторая функция для отправки результата или запуска запроса) вызывается только после того, как funcA и funcB ВСЕ завершили выполнение. В идеале, funcC может каким-то образом прослушивать все промежуточные вызовы функций, чтобы завершиться, и ТО будет выполняться? Я надеюсь изучить общий шаблон Javascript для решения такой проблемы.

Спасибо за вашу помощь.

Другая идея: Может быть, передать общий объект в funcA и funcB, и когда они завершат выполнение, отметьте общий объект как sharedThing.funcA = & quot; complete & quot; или sharedThing.funcB = & quot; завершить & quot; а потом как нибудь? Пусть funcC выполняется, когда общий объект достигает состояния, когда все поля помечены как заполненные. Я не уверен, как именно вы могли бы заставить funcC ждать этого.

Редактировать: Я должен отметить, что я использую серверный Javascript (Node.js), и я хотел бы изучить шаблон для его решения, просто используя старый старый Javascript (без использования jQuery или других библиотек). Конечно, эта проблема достаточно общая, что есть чистое решение на чистом Javascript?

Ответы на вопрос(6)

Ваш ответ на вопрос