Nodejs API州......
就如何在JavaScript中使用throw的本质而言,几乎就是这样 从来没有任何方法安全地“拿起你离开的地方”,没有泄漏 引用,或创建一些其他类型的未定义的脆弱状态。
然而,Koa会捕获错误并避免退出nodejs进程。是什么让Koa安全地藐视这个建议?
答案 0 :(得分:1)
主要有两种情况,koa无法安全地处理错误。
不同刻度线上的抛出错误:
app.use(function* () {
setImmediate(function () {
throw new Error('boom')
})
})
未设置为response.body=
的发射器错误:
app.use(function* () {
this.response.body = stream.pipe(zlib.createGzip())
})
执行第一种情况的任何函数或库都是格式错误的,不应使用。如果函数/库正确使用promises和/或回调,它将永远不会发生。
对于发射器,只需将每个流设置为正文(或使用中间件):
app.use(function* () {
this.response.body = stream
this.response.body = this.response.body.pipe(zlib.createGzip())
})
Koa通过允许你在" async"上使用try / catch来做到这一点。东西,特别是回调和承诺。但是,您无法尝试/捕获在不同的刻度线或发射器上抛出的错误。