Utiliser Monoskin dans la route express que je fais ce qui suit:Briser Callback Hell comment puis-je passer une valeur?
router.get(/getbuyerinfo, function(req, res) {
var data = "data";
db.collection('buyerRec').find().toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.collection('buyerHistory').find().toArray(function(err, result) {
if (err) throw err;
console.log(result);
console.log(data);
});
});
});
Il est en fait beaucoup plus profond. Mais pour tenter de nettoyer les callbacks profondes, la plus directe de manière vers l'avant et le plus rapide, même si pas la façon la plus moderne, j'ai créé:
router.get(/getbuyerinfo, getBuyerRec);
function getBuyerRec(req, res) {
var data = "data";
db.collection('buyerRec').find().toArray(getBuyerHistory);
}
function getBuyerHistory(err, result) {
if (err) throw err;
console.log(result);
db.collection('buyerHistory').find().toArray(function(err, result) {
if (err) throw err;
console.log(result);
console.log(data);
});
}
Mon problème est que « les données » n'est plus portée . La valeur 'data' provient de l'Express router.get(). Comment puis-je transmettre 'data' à la fonction getBuyerHistory pour pouvoir l'utiliser?
votre exemple montre les données étant encore portée. – zzzzBov
@zzzzBov ce serait mon rêve parce que c'est simple. Puis-je vous demander de m'expliquer votre compréhension? 'data' et le reste du code sont en fait dans une route Express, car je vais ajuster le code pour montrer. Donc, les «données» ne sont pas globales. Comment est-il dans la portée de la fonction getBuyerHistory? – Ric
Jetez un oeil [ici] (http://stackoverflow.com/a/28250687/1048572) - application partielle est ce que vous cherchez. Même si la fermeture n'est pas faite par bind ou par partial, vous pouvez réduire votre imbrication à un maximum de deux niveaux. – Bergi