Tengo dos funciones asíncronas, que son la async function start(){} y async function end(){} Entonces en ambas funciones tengo operaciones mongodb. Quiero enviar la identificación del documento generada dentro de la función start() a la función end() y luego registrarla allí. Esta es mi función de inicio:
async function start() { await client.connect(); const db = client.db(dbName); const col = db.collection("mongotroncol"); let personDocument = { "name" : "shubham" } // Insert a single document, wait for promise so we can read it back const p = await col.insertOne(personDocument); const abc = p.insertedId; const docid = abc.toString() return docid; }y luego tengo esta función end() y estoy tratando de enviar un docid único generado en la función start() a la función end() con la devolución de ese valor y registrarlo en la función end() de la siguiente manera:
async function end() { mongoid = await start(); console.log(mongoid); } Entonces, por ejemplo, "623cb515366c70a2a3c27288", esta es la identificación de mi documento generada en la función de inicio (), entonces lo que deseo es consolar. Registrar esta misma identificación en la función de finalización (), pero mientras escribo, await start() en la función de finalización (), nuevamente se llama y ejecuta la función start (), resultado del cual se genera una nueva identificación del documento mongodb y se registra una nueva, pero quiero que la identificación del documento se genere solo desde el inicio ().
Un punto importante: tengo dos eventos que son app.on('ready') y app.on('quit'), así que llamo await start() y await end() respectivamente así:
app.on('ready', () => { await start(); });y
app.on('quit', () => { await end(); });Entonces, mi primer clic en el botón activará el evento app.on('ready') que ejecutará la función de inicio asincrónico () y generará un documento mongodb con docid único y luego en mi segundo clic en el botón (que haré después de algunos minutos) lo hará trigger app.on('quit') que ejecutará la función asíncrona end() e idealmente quiero que se genere el mismo docid en la función asíncrona start() pero obtengo "623cb515366c70a2a3c27289", que es exactamente un bit incrementado que el generado en start () función [consulte el valor de id mencionado en el párrafo anterior] Entonces, la preocupación es obtener el mismo docid. ¡¡Gracias!!
Entonces, después de una pequeña lluvia de ideas, probé un enfoque y funcionó.
Declaré una variable global como let doc_id = "";
Luego, en la función start() , acabo de asignar un valor a doc_id de esta manera:
async function start() { await client.connect(); const db = client.db(dbName); const col = db.collection("mongotroncol"); let personDocument = { "name" : "shubham" } const p = await col.insertOne(personDocument); doc_id = p.insertedId.toString();}
Y ahora al momento de llamar a la función end() hice esto:
app.on('quit', () => { await end(doc_id); }); async function end(doc_id) { console.log(doc-id); }