Моя особая проблема заключается в том, что мне нужно выполнить (потенциально) большое количество функций 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 может каким-то образом прослушать все вызовы промежуточных функций для завершения и THEN будет выполняться? Я надеюсь узнать общий шаблон Javascript для решения этой проблемы.
Спасибо за вашу помощь.
Другая идея: Может быть, передать общий объект funcA и funcB, и когда они завершат выполнение, отметьте общий объект, например sharedThing.funcA = "complete" или sharedThing.funcB = "complete", а затем каким-то образом? выполняются funcC, когда общий объект достигает состояния, в котором все поля отмечены как завершенные. Я не уверен, как именно вы можете заставить funcC ждать этого.
Изменить: Я должен отметить, что я использую Javascript на стороне сервера (Node.js), и я хотел бы изучить шаблон для его решения, используя простой старый Javascript (без использования jQuery или других библиотек). Наверняка эта проблема достаточно общая, что есть чистое чисто-Javascript решение?