Skip to content

Instantly share code, notes, and snippets.

@chrnx-dev
Created March 26, 2019 21:47
Show Gist options
  • Save chrnx-dev/c5483a442ded0fe98d032290f572fadb to your computer and use it in GitHub Desktop.
Save chrnx-dev/c5483a442ded0fe98d032290f572fadb to your computer and use it in GitHub Desktop.
export async function createResource(req,res) {
try {
// cuando utilizar await y cuando no ?
/* Siempre que requieras un valor de una funcion async o await y que tu resultado no dependa de esa llamada*/
// processResource puede tomar 2 o 3 minutos por eso creo que no deberia tener await
// para no tener esperando la respuesta del endpoint hasta que termine
/* processResource debes usar await, ya que creo que tu resultado depende de esa funcion, no importa cuanto tome al final si dependes
mostrar el resultado en resourceId, deberias refactorizar processResource de otro modo nodejs y express siempre entregara un undefined*/
processResourceRequest();
return res.status(HTTPStatuses.CREATED).json(resourceId);
} catch {
return res.status(HTTPStatuses.BAD_REQUEST).json(error);
}
}
export const processResourceRequest = async (resourceId, hostName) => {
/** El try catch esta de mas ya lo estas validando en el response */
try {
// cualquier numero de llamadas a funciones incluyendo api calls y mongo
//ahi si usando await
/** Aqui es donde debes pensar en el refactoring, usa await si necesitas el valor pondre un ejemplo aqui */
const otrasPromisesResults = Promise.all([retornaPromise1(), retornaPromise2(), retornaPromise3()]);
// ^ estas se hacen en paralelo sin embargo si quieres que terminen todas las promises agrega await antes de Promise esto bloqueara
// a node hasta que se finalize todas las promises.
const resource = await Resource.findByid(...): // <- esta espera a que termine el findById
runTerraformForResource(resourceId);
} catch (e) {
throw new Error('Error at resource.controller.processResourceRequest :' + e);
}
}
// la duda del for // esta bin definida la funcion o deberia usar promise.resolve or reject ?
/** Aqui es donde pregunte si necesitabas hacer en paralelo o en serie **/
async function checkForHostinAD(searchstring) {
let hostFound = false;
let result;
for (let i = 0, len = ldapQueryOptions.length; i < len; i++) {
/** Aqui estas obligando a esperar al for a hacer cada request podrias hacer estos en batch de 5 por ejemplo como paginate
haces esos request en paralelo y luego haces la validacion, aunque se me hace extrano que hagas todo uno a uno creo que es
mejor si se hace todo de un jalon**/
result = await queryLdapForHost(searchstring, ldapQueryOptions[i]);
if(result && (result.entries.length > 0)) {
console.log('Record found in AD: ' + result.entries[0].distinguishedName)
hostFound = true;
break;
}
}
return hostFound;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment