【发布时间】:2012-04-13 17:20:00
【问题描述】:
我有一个节点应用程序,它不是一个 Web 应用程序 - 它在返回 1 之前完成了一系列异步任务。在返回之前,程序的结果会立即打印到控制台。 p>
如何确保所有异步工作在返回前完成?通过确保我们在调用 res.end() 之前完成的所有任务,我能够在 Web 应用程序中实现与此类似的事情,但是在让脚本返回之前,我没有任何等效的方法可以调用最终的“事件”。
目前我的(损坏的)函数见下文,试图等到 callStack 为空。我刚刚发现这是一种荒谬的方法,因为 node 在进入 processObjWithRef 中调用的任何异步函数之前会等待 processHub 完成。
function processHub(hubFileContents){
var callStack = [];
var myNewObj = {};
processObjWithRef(samplePayload, myNewObj, callStack);
while(callStack.length>0){
//do nothing
}
return 1
}
注意:我之前曾多次尝试使用 async 之类的库来实现这种行为(请参阅我在 How can I make this call to request in nodejs synchronous? 处的相关问题),因此在建议任何基于“仅使用”的答案之前,请考虑那里的答案和 cmets异步”。
【问题讨论】:
-
"如何确保所有异步工作在返回前完成?"是一个无意义的问题 - 在所有异步任务完成之前,控制权永远不会返回到 shell,所以在最后一个异步函数完成之前保留控制台输出解决了我的问题。感谢大家提交答案。
标签: javascript node.js asynchronous synchronous