我的具体问题是我需要执行(可能)大量的 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 = "complete" 或 sharedThing.funcB = "complete" 然后以某种方式?当共享对象达到所有字段都标记为完成的状态时,执行 funcC。我不确定你如何让 funcC 等待这个。
编辑:我应该注意我正在使用服务器端 Javascript(Node.js),我想学习一种模式来解决它,只需使用普通的旧 Javascript(不使用 jQuery 或其他库)。当然,这个问题足够普遍,以至于有一个干净的纯 JavaScript 解决方案?