Esaminando node.js ed evitando i callback di annidamento. Ho trovato Async.js, qualcuno può mostrarmi come posso riscrivere questo codice usando il metodo async.waterfall?
// db is a mongodb instance
db.open(function(err, client){
client.createCollection("docs", function(err, col) {
client.collection("docs", function(err, col) {
for (var i = 0; i < 100; i++) {
col.insert({c:i}, function() {});
}
console.log('Insert done OK.');
});
});
});
Quali problemi ha questa ingenua soluzione con le funzioni interne, rispetto al metodo asincrono?
db.open(openAndInsert);
function openAndInsert(err, client) {
var myCollection = "docs";
client.createCollection(myCollection, openCollection);
function openCollection(err, col) {
client.collection(myCollection, insertIntoCollection);
}
function insertIntoCollection(err, col) {
for (var idx = 0; idx < 100; idx += 1) {
col.insert({c:idx}, function () {});
}
console.log('Insert done OK.');
}
}
I tre livelli di annidamento nel codice originale sembrano un odore di codice, ma non sono sicuro che la mia casa sia stata laminata o che la soluzione asincrona sia universalmente migliore. Qualcuno preferirebbe lasciare le funzioni annidate così com'è? Se sì, quanto dovrebbe essere profonda la nidificazione prima di usare un qualche tipo di controllo di flusso?