javascript express async-await ecmascript-2017

javascript - ¿Hay alguna manera de ajustar un bloque de espera/async try/catch a cada función?



express async-await (2)

Sí, también puede escribir fácilmente un envoltorio para funciones asincrónicas, solo use async / await :

function wrapper(f) { return async function() { // ^^^^^ try { return await f.apply(this, arguments); // ^^^^^ } catch(e) { customErrorHandler(e) } } }

O usa promesas directamente, como en este ejemplo que está más personalizado para expresar (especialmente con el número de parámetros):

function promiseWrapper(fn) { return (req, res, next) => { fn(req, res).catch(next); }; }

Así que estoy usando express.js y estoy buscando usar async / await con el nodo 7. ¿Hay alguna manera de que aún pueda detectar errores pero deshacerme del bloque try / catch? Tal vez un contenedor de funciones? No estoy seguro de cómo esto realmente ejecutaría el código de la función y también llamaría next(err) .

exports.index = async function(req, res, next) { try { let user = await User.findOne().exec(); res.status(200).json(user); } catch(err) { next(err); } }

Algo como esto...?

function example() { // Implements try/catch block and then handles error. } exports.index = async example(req, res, next) { let user = await User.findOne().exec(); res.status(200).json(user); }

EDITAR:

Algo más parecido a esto:

var wrapper = function(f) { return function() { try { f.apply(this, arguments); } catch(e) { customErrorHandler(e) } } }

Esto de alguna manera manejaría el bloque try / catch pero no funciona:

exports.index = wrapper(async example(req, res, next) { let user = await User.findOne().exec(); res.status(200).json(user); });

Consulte ¿Hay alguna forma de agregar try-catch a cada función en Javascript? para el ejemplo no asíncrono.


Una respuesta similar here esperanza puede ayudarte

const sthError = () => Promise.reject(''sth error''); const test = opts => { return (async () => { // do sth await sthError(); return ''ok''; })().catch(err => { console.error(err); // error will be catched there }); }; test().then(ret => { console.log(ret); });