# 20230315: Node callback to async
- Una función callback es la que tiene como último argumento un callback
 
aCallbackFunction(x, (err, data) => {
	if (err) {
		console.log(err);
		// ...
		return;
	}
	console.log(data);
	//...
});
- La llamada a una función callback se puede transformar en la llamada a una promise
 
const aPromise = (x) => new Promise((resolve, reject) => {
	aCallbackFunction(x, (err, data) => {
		if (err) {
			return reject(err);
		}
		resolve(data);
	});
});
aPromise(x)
	.then(data => {
		console.log(data);
		//...
	})
	.catch(err => {
		console.log(err);
		// ...
	});
- La llamada a una promise se puede transfromar en una llamada async
 
const aAsyncFunction = async (x) => {
	try {
		const data = await aPromise(x);
		//...
	} catch(err) {
		console.log(err);
		// ...
	}
};
aAsyncFunction(x);
# promisify
- En node, se puede usar promisify
 
const util = require('util');
const aPromise = util.promisify(aCallbackFunction);
- Como contraparte, existe callbackify, que permite obtener una función callback a partir de una función asyncrona (o que retorne una promesa)
 
const util = require('util');
const aCallbackFunction = util.callbackify(aPromise);