async/await
Way. test111.js
"use strict";
/*
* based on https://stackoverflow.com/questions/54901478/js-how-to-call-an-async-function-within-a-promise-then
*/
const simulatedSlowDiskOp = function (t) {
setTimeout( function() {
console.log(`delayed ${t} msec`);
}, t);
};
const egConnect = async function () {
console.log("first");
await simulatedSlowDiskOp(500);
return "connected";
};
const egRetrieve = async function (p1) {
console.log(p1 + " second");
await simulatedSlowDiskOp(200);
return "retrieved";
};
const getSomethingFromSlowDisk = function () {
return new Promise(async function (resolve, reject) {
let x = await egConnect();
let y = await egRetrieve(x);
console.log(y + " last");
resolve(y);
reject(error);
});
};
getSomethingFromSlowDisk();
And its execution
$ node test111 first connected second retrieved last delayed 200 msec delayed 500 msec
async/await
Way on Mongo. mongoWrap.js
"use strict";
/*
* wrapper for CRUD functionality of a mongodb
*/
const mongo = require('mongodb').MongoClient;
const conparam = { useNewUrlParser: true, useUnifiedTopology: true};
exports.retrieve = async function(url, dbn, coll, query) {
const constr = `mongodb://${url}:27017`;
const con = await mongo.connect(constr, conparam);
const db = con.db(dbn);
let stuff = null;
try {
stuff = await db.collection(coll).find(query).toArray();
} catch(err) {
console.log(error);
} finally {
con.close();
return stuff;
}
}
exports.upsert = async function(url, dbn, coll, query, chk) {
const constr = `mongodb://${url}:27017`;
const con = await mongo.connect(constr, conparam);
const db = con.db(dbn);
let stuff = null;
try {
stuff = await db.collection(coll).updateOne(chk, {"$set": query}, {upsert: true});
} catch(err) {
console.log(error);
} finally {
con.close();
return stuff;
}
}
This can be tested by
async/await
on Mongo. test117.js
"use strict";
const mon = require("./mongoWrap");
mon.retrieve("localhost", "world", "country", {name: "Canada"});
mon.retrieve("localhost", "world", "city", {name: "Aarhus"});