Je suis en train de me familiariser avec le SSO et j'essaie de le faire sans la méthode conventionnelle. User
classe/objet. Je suis novice en matière de programmation asynchrone et j'ai des difficultés à gérer le flux de données. Je suis bloqué à un moment où j'ai réussi à exporter un objet boolean
mais mon import (dans un autre module) obtient une valeur de undefined
. Je pense que c'est parce que l'importation n'attend pas que l'instruction d'exportation correspondante soit exécutée en premier. Comment faire pour que cette instruction et tout le code qui suit attendent ?
Je ne sais pas quoi essayer dans ce cas.
Module qui exporte usrFlag
const request = require("request");
let usrFlag = false; // assuming user doesn't already exist.
function workDB(usr_id, usr_name, dateTimeStamp) {
//some code excluded - preparing selector query on cloudant db
request(options, function (error, response, body) {
if (error) throw new Error(error);
if (body.docs.length == 0) addUsr(usr_id, usr_name, dateTimeStamp);
else {
xyz(true); //This user already exists in cloudant
console.log('User already exists since', body.docs[0].storageTime);
}
});
}
async function setUsrFlag(val) { usrFlag = val; }
async function xyz(val) {
await setUsrFlag(val);
//module.exports below does not execute until usrFlag has the correct value.
//so value is not exported until usrFlag has been properly set.
console.log(usrFlag);
module.exports.usrFlag = usrFlag;
}
Module qui importe cette valeur
const usrP = require('../config/passport-setup');
const dbProcess = require('../dbOps/dbProcessLogic'); // <-- This is import
router.get('/google/redirect', passport.authenticate('google'), (req, res) => {
dbProcess.workDB(usrP.usrPrf.id, usrP.usrPrf.displayName, new Date());
// Instead of true/false, I see undefined here.
console.log(dbProcess.usrFlag);
});
Je m'attends à ce que la fonction require du module d'importation attende que le module d'exportation lui envoie toutes les valeurs requises. Cependant, je sais que cela ne va probablement pas se produire sans que je lui dise explicitement de le faire. Ma question est la suivante : comment ?