我的标准回调地狱http
服务器就像(简化):
http.createServer((req, res) => {
doSomething(() => {
doMoreSomethings(() => {
if (!isIt())
// explode A
if (!isItReally())
// explode B
req.on('data', (c) => {
if (bad(c))
// explode C
});
req.on('end', () => {
// explode D
});
});
});
};
我知道结束请求的唯一方法是res.end()
,这是异步的,所以在你调用之后它会运行(据我所知)。有没有办法做一个伪 - process.exit
中途飞行并中止处理请求,所以我不浪费时间在其他东西上?例如,我如何停在上面的// explode
行并且不处理其他任何内容? throw
不超越范围边界。基本上,我认为,我希望return
或者从嵌套回调中突破createServer
回调。这样做的唯一方法是能够使用单个路径的代码并且每个步骤都没有多个语句吗?比如,水平编码,而不是垂直的KLOC。
我显然是Node noob。
修改:提出问题的另一种方式可能是:是否可以在// explode C
行中止,不再读取任何数据,不处理end
事件,并且不再处理doMoreSomethings
回调中的任何行(如果有的话)?我猜测后者是不可能的,因为据我所知,doMoreSomethings
运行完成,包括附加数据和结束事件处理程序,然后只有队列中的下一个事件(可能是数据)事件)得到处理,此时doMoreSomethings
完成。但我可能错过了一些东西。此代码是否只是压缩,调用isIt
和isItReally
,分配事件处理程序,跳出所有回调,createServer
回调完成,然后所有额外的东西(数据/结束/等)都从事件队列中运行?
答案 0 :(得分:0)
通常,您将使用return
语句。当您拨打return
下面的任何代码时,它将无法执行。虽然,如果您的函数isIt()
或isItReally()
是异步函数,那么您将遇到麻烦,因为它们以同步方式使用。