J'ai trois fichiers: user.js, influencer.js, & validate.jsComment transmettre des variables lors de l'utilisation de plusieurs exportations de modules dépendant du résultat d'un autre?
En user.js, j'importer ./influencer (comme var = influenceur) & ./validate (comme var = validate).
Ma fonction user.js:
addAccount: function(){
return functions.database.ref('/acct/{accountID}/name/').onCreate(event => {
var accountID = event.params.accountID;
var name = JSON.stringify(event.data.val()).replace(/['"]+/g, '');
console.log("New Account Added ("+accountID+")");
console.log("Nickname: " +name);
influencer.getIG(name);
var data = influencer.data;
validate.validateThis(data);
});
}
Avec influencer.getIG (nom), je passe le nom que nous avons défini ci-dessus à la fonction getIG (à l'intérieur de influencer.js). Cela fonctionne comme un charme. Le résultat est le corps JSON.
Ce que je veux faire maintenant est de prendre ce résultat de corps JSON et de le passer à la fonction de validation (dans validate.js). Dans influencer.js, j'ai également ajouté "exports.data = data;". Cela dit, je n'arrive pas à comprendre comment passer "data" à validate.js. Je l'enregistre, et il retourne indéfini. J'ai ajouté un timeout avant d'exécuter validateThis (data) et encore indéfini. La fonction de validation fonctionne très bien; Je l'ai testé. Mais clairement, je ne le fais pas de la bonne façon.
Ceci est ma fonction influencer.getIG:
module.exports = {
getIG: function (name) {
var url = "https://www.instagram.com/"+name+"/?__a=1"
console.log(url);
request({
url: url
}, function (error, response, body) {
var data = JSON.parse(body);
console.log(data);
exports.data = data;
})
}
}
Comment puis-je passer le résultat du second module au troisième module dans ma fonction? Qu'est-ce que je fais mal?
Il semble que 'influencer.getIG()' soit asynchrone, ce qui signifie que vous avez besoin d'un rappel ou d'une promesse de savoir quand il est terminé avant de pouvoir accéder à 'influencer.data'. Pouvez-vous éditer votre question pour inclure du code pour 'influencer.getIG'? –
est influencer.getIG (nom) asynchrone? si c'est le cas, data = influencer.data peut être appelé avant que les données réelles ne soient récupérées. Vous devrez peut-être utiliser le rappel ou la promesse si c'est le cas. –
D'accord, je vais mettre à jour la question avec ces détails. J'ai cependant ajouté un gros timeout pour que influencer.getIG() soit fini avant de laisser valider validateThis (data). Il est toujours retourné indéfini, cependant. – ryangineer