我的具体问题是需要执行(可能)大量的JavaScript函数来准备类似于批处理文件的东西(每个函数调用添加一些信息到同一个批处理文件中),然后在所有这些调用完成后,执行最终的函数以发送批处理文件(比如作为HTML响应)。我正在寻找一个通用的JavaScript编程模式来解决这个问题。
问题概括: 给定JavaScript函数funcA()、funcB()和funcC(),我需要找出最佳的执行顺序,使得funcA和funcB在执行完成后再执行funcC。我知道可以使用嵌套回调函数来实现这一点,例如:
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等执行顺序并不重要。因此,在我的解决方案中,我从技术上讲做了比所需更多的工作,因为我将所有函数都放在一个串行顺序中。对我而言,唯一重要的是,只有在funcA和funcB全部完成执行之后才调用funcC(发送结果或发出请求的某个函数)。理想情况下,funcC可以监听所有中间函数调用的完成,并且在此后执行。我希望学习一种通用的JavaScript模式来解决这样的问题。
感谢您的帮助。
另一个想法:也许可以将一个共享对象传递给funcA和funcB,当它们完成执行时,像sharedThing.funcA =“complete”或sharedThing.funcB =“complete”这样标记共享对象,然后以某种方式?在共享对象达到所有字段都标记为已完成的状态时执行funcC。我不确定如何使funcC等待这个过程。
编辑:我应该指出,我正在使用服务器端JavaScript(Node.js),我想学习一种使用纯旧JavaScript(不使用jQuery或其他库)解决它的模式。毫无疑问,这个问题足够通用,有一个干净的纯JavaScript解决方案吗?
$.when(A, B).then(C)
的语法。 - pimvdb