2014-12-17 2 views
1

Nodejs API В состоянии ...Защищает ли Коа ошибки?

По самой природе, как бросить работает в JavaScript, там почти никогда ли способ безопасно «забрать, где вы остановились», без утечки ссылки, или создания какое-то другое неопределенное хрупкое состояние.

Однако Koa останавливает ошибки и избегает выхода из процесса nodejs. Что позволяет Коа благополучно игнорировать этот совет?

ответ

1

В основном два случая, когда koa не может безопасно обрабатывать ошибки.

Метательных ошибки на различные клещах:

app.use(function*() { 
    setImmediate(function() { 
    throw new Error('boom') 
    }) 
}) 

ошибка эмиттера, которые не установлены как response.body=:

app.use(function*() { 
    this.response.body = stream.pipe(zlib.createGzip()) 
}) 

Любой функция или библиотеку, которая делает первый случай имеет неверный формат, и не должно быть использованы. Если функция/библиотека использует обещания и/или обратные вызовы правильно, это никогда не произойдет.

Для эмиттеров, просто всегда устанавливается каждый поток в качестве тела (или использование промежуточного слоя):

app.use(function*() { 
    this.response.body = stream 
    this.response.body = this.response.body.pipe(zlib.createGzip()) 
}) 

Коа делает это, позволяя использовать попытаться/поймать на «асинхронным» вещи, а именно обратных вызовов и обещаний. Однако вы не можете попробовать/поймать ошибку, выброшенную на другой тик или эмиттер.