Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

254
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda