Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

255
Vistas
¿Cómo puedo usar async/await o promesas para que mi código se ejecute sincrónicamente?

Cada vez que ejecuto este código, la función content_2 se ejecuta primero en lugar de content_1. El siguiente código se ejecuta de forma asíncrona y la segunda función usa una variable en la primera función a través de "node.js store" para ejecutarse, por lo que necesito content_2 para esperar a que content_1 finalice antes de que comience a ejecutarse, quiero que se ejecute de forma sincrónica.

 const content_1 = function main_Content(req, res, callback) { const assert = require('assert'); const fs = require('fs'); const mongodb = require('mongodb'); const mv = require('mv'); var filename = req.body.Filename + Math.ceil((Math.random() * 1000000000000) + 10); console.log(req.body.Filename) //CREATE A FILE fs.writeFile(filename + '.html', req.body.Content, (err) => { if (err) throw err; console.log('File was created successfully...'); }); //MOVE TO UPLOADS const currentPath = path.join(__dirname, "../", filename + ".html"); const destinationPath = path.join(__dirname, "../uploads", filename + ".html"); mv(currentPath, destinationPath, function(err) { if (err) { throw err } else { console.log("Successfully moved the file!"); } }); const uri = 'mongodb://localhost:27017'; const dbName = 'registration'; const client = new mongodb.MongoClient(uri); client.connect(function(error) { assert.ifError(error); const db = client.db(dbName); var bucket = new mongodb.GridFSBucket(db); //UPLOAD FILE TO DB THROUGH STREAMING fs.createReadStream('./uploads/' + filename + '.html'). pipe(bucket.openUploadStream(filename + ".html")). on('error', function(error) { assert.ifError(error); }). on('finish', function(res) { var result = res._id store.set('id', result); //process.exit(0); }); });

}

 const content_2 = function metaData(req, res, callback) { const obj = new ObjectId() var filename = req.body.Filename + Math.ceil((Math.random() * 1000000000000) + 10); const slice = require('array-slice') var id = store.get('id'); console.log(id) var objID = slice(id, 14, 24) console.log(objID + '2nd') Key.findByIdAndUpdate(req.body.id, {$push: {Articles:{Title: req.body.Title, Desc:req.body.Desc, Content: {_id: `ObjectId("${objID}")`}}} }, (err, docs) => { if(err){ console.log(err) }else{ console.log('done' + obj) } });

}

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Te daré dos ejemplos. El primero será usar promesas. El segundo usará async await. Sin embargo, la salida es exactamente la misma.

Supongamos esos tres métodos. Alguien limpia una habitación, "luego" alguien verifica si la habitación está limpia, "luego" se realiza un pago.

versión promesas

 const cleanRoom = new Promise((res, rej) => { console.log("Cleaning room..."); setTimeout(() => { console.log("Room clean!"); res(); }, 2000); }); const cleanCheckup = () => { return new Promise((res, rej) => { console.log("Clean checkup..."); setTimeout(() => { console.log("Checkup complete!"); res(); }, 2000); }); } const payMoney = () => { console.log("Open Wallet!"); return new Promise((res, rej) => { setTimeout(() => { res("50€"); }, 2000); }); } cleanRoom .then(cleanCheckup) .then(payMoney) .then(console.log);

Versión asíncrona/en espera

 const sleep = mils => { return new Promise(r => setTimeout(r, mils)); }; const cleanRoomAW = async () => { console.log("Cleaning room..."); await sleep(2000); console.log("Room clean!"); }; const cleanCheckupAW = async () => { console.log("Clean checkup..."); await sleep(2000); console.log("Checkup complete!"); }; const payMonney = async () => { console.log("Open Wallet!"); await sleep(2000); return "50€"; }; async function run() { await cleanRoomAW(); await cleanCheckupAW(); const value = await payMonney(); console.log(value); }; run();

Tenga en cuenta el modo de suspensión del método auxiliar, ya que todavía no puede esperar a que se establezca el tiempo de espera en el navegador. (En el nodo js> = 16, creo que no necesita este método auxiliar).

Puede copiar/pegar cualquiera de las dos versiones en la consola del navegador y confirmar que ambas versiones se ejecutan sincrónicamente a pesar de la naturaleza asincrónica de setTimeout.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda