Как выполнить функцию 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?