Hice algunas operaciones de base de datos y después de algunas llamadas de telenovelas. Aquí está el resultado. No me pareció correcto. ¿Cómo puedo sincronizarlos en nodejs? Todo esto son funciones 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"); }); }); }); }); }); });"Cómo forzar algo asíncrono para que se sincronice" Probablemente no puedas de todos modos, y en los casos en que puedas, no lo harás. ALGUNA VEZ. Como muchas preguntas, la tuya es un problema XY . Preguntas cómo hacer algo que crees que resolverá tu problema, cuando solo lo empeorará.
No obligas a un proceso asíncrono a ser síncrono. Aprende el asincronismo y acepta su poder, o abandona Node.js y usa un lenguaje y tiempo de ejecución síncronos.
Una de las formas de hacerlo, y probablemente la más elegante, es usar await :
(Nota: antes de que alguien comente "Debe estar en una función asíncrona", no, no es así, ya que Node v14.8 admite la espera de nivel superior )
let result = await sccmConnectDB.getAllComputers(); const computers = result[0]; console.log("select from sccm db is completed...") await caConnectDB.deletezSCCM2CM(); console.log("deleting from ca db zsccm2cm table is completed..."); await caConnectDB.insertzSCCM2CM(computers); const sessionId = await login.login(); console.log("login successfull"); result = await getHostName.getHostNames(); const hostNames = result[0]; console.log("query result for hostname -->", hostNames); let uuid, attrVals, attrbts; for (let element of hostNames) { uuid = "nr:" + element.uuid; attrVals = { string: ["system_name", element.compName] }; attrbts = { Attributes: [] }; await updateObject.updateObject(sessionId, uuid, attrVals, attrbts); console.log("Update successfull"); } await logout.logout(sessionId); console.log("logout successfull"); En pocas palabras, todo lo escrito someFunction().then( result => también se puede escribir const result = await someFunction(); Es azúcar sintáctico que parece código síncrono pero sigue siendo asíncrono.