Soy nuevo en las funciones asíncronas y estoy luchando para que funcione con consultas de base de datos... Esto es lo que tengo:
fetch: async (id) => { if (id!=='something') { return await db.getConnection().query("SELECT user FROM `table` WHERE id='" + id + "'", function (err, result) { if (err) { throw err } else { console.log(result[0].user); return result[0].user; } }); } throw new Error('Failed fetching installation'); } Esto da como resultado un error: Cannot read property 'user' of undefined , pero después de este error, aparece console.log indicando que el result[0] está realmente definido.
Entonces, supongo que no está esperando el resultado o algo así (aunque no está presionando el throw new Error ). De todos modos, estoy seguro de que esto es solo porque no lo estoy haciendo bien ... como dije, solo estoy comenzando con este tipo de comportamientos asincrónicos.
Como se mencionó anteriormente, está mezclando promesas y devoluciones de llamada. No estoy seguro de si mi ejemplo a continuación es posible con su biblioteca de base de datos, pero creo que si lo es, es un enfoque mucho más limpio.
const fetch = async (id) => { if (id !== 'something') { try { const query = await db .getConnection() .query("SELECT user FROM `table` WHERE id='" + id + "'") return query[0].user } catch (error) { console.log(error) throw new Error(`Execution of query failed with error: ${error}`) } } throw new Error('Failed fetching installation') } const user = fetch('your-id') // (prefix fetch with await if not at top level)