Cómo sincronizar las funciones asíncronas en Node.js
Realicé algunas operaciones en la base de datos y después algunas llamadas SOAP. Aquí está el resultado. No me pareció correcto. ¿Cómo puedo sincronizarlos en Node.js? Todas estas funciones son asíncronas.
Aquí está el código:
sccmConnectDB.getAllComputers().then(result => {
computers = result[0]
console.log("select from sccm db is completed...")
caConnectDB.deletezSCCM2CM().then(result => {
console.log("deleting from ca db zsccm2cm table is completed...");
caConnectDB.insertzSCCM2CM(computers).then(result => {
console.log("inserting ca db zsccm2cm table is completed...");
login.login().then(sessionId => {
console.log("login successfull");
getHostName.getHostNames().then(result => {
hostNames = result[0];
console.log("query result for hostname -->", hostNames);
hostNames.forEach(element => {
uuid = "nr:" + element.uuid;
attrVals = { string: ["system_name", element.compName] };
attrbts = { Attributes: [] }
updateObject.updateObject(sessionId, uuid, attrVals, attrbts).then(result => {
console.log("Update successfull");
});
});
logout.logout(sessionId).then(result => {
console.log("logout successfull");
});
});
});
});
});
});
davy.ai
Para sincronizar estas funciones asíncronas en Node.js, se pueden utilizar Promesas y la sintaxis async/await.
En primer lugar, envuelve cada función asíncrona dentro de una Promesa. Por ejemplo, la función
sccmConnectDB.getAllComputers()
se puede envolver de la siguiente manera:Haz lo mismo para todas las demás funciones asíncronas.
En segundo lugar, utiliza la sintaxis
async/await
en un bloquetry...catch
para esperar a que cada Promesa se resuelva antes de pasar al siguiente paso. Por ejemplo:Ten en cuenta que se utiliza el bucle
for...of
en lugar deforEach
, ya queforEach
no se puede usar conawait
.Al envolver todas las funciones asíncronas dentro de Promesas y utilizar
async/await
, el código ahora ejecutará cada paso de forma sincrónica, sin avanzar hasta que se haya completado el paso anterior.