J'ai beaucoup de fichiers .txt où chaque ligne a des données que je veux ajouter à un modèle, de sorte qu'il peut être prêt pour l'interrogation. Le problème est qu'aucune des requêtes "insert" n'est exécutée, probablement en raison de l'asynchronicité de la bibliothèque.Comment ajouter beaucoup de données au modèle Sequelize?
Voici ce que j'ai:
// Connect to DB
// Set up Model
// Model.sync()
// first for loop (for each .txt)
// second for loop (nested) (for each line in the .txt)
// in second for loop: Model.create(data);
Que dois-je faire pour vous assurer que chaque objet de données est ajouté avec succès à la base de données?
Voici le code:
var Location = sequelize.define('Location', {
name: Sequelize.STRING,
country: Sequelize.STRING,
lat: Sequelize.STRING,
long: Sequelize.STRING
});
Location.sync().success(function(){
for (var i = 0; i < txts.length; i++){
var txt = txts[i],
country = txt.substr(0, txt.indexOf('.')),
data = fs.readFileSync(dir +"/" + txt, 'utf-8'),
locations = data.split('\n');
for (var j =1; j < locations.length; j++){
var loc = locations[j],
chunks = _.without(loc.split('\t'), ''),
lat = chunks[3],
long = chunks[4],
name = chunks[16]
Location.build({
country: country,
lat: lat,
long: long,
name: name
})
.save()
.success(function(){
console.log('success');
})
.error(function(err){
if (err) throw err;
});
}
}
J'ai essayé d'utiliser la méthode foreach lodash pour itérer à travers les boucles mais les deux méthodes semblent sauter sur la Location.build()
J'ai ajouté le code que j'ai. Est-ce que async.each ferait la même chose que _.forEach? Le problème n'est-il pas asynchrone ici, pas la solution? – ehsangh
Je crois que cela devrait marcher avec async.eachSeries. Ce qui est difficile à comprendre à propos de Node, c'est que sans utiliser de fonction de rappel ou de fonction asynchrone, Node progresse tout au long de vos boucles externes et internes et passe à l'élément suivant sans attendre que la sauvegarde ait lieu. Je recommande de commencer avec 3 fichiers et d'ajouter des instructions console.log pour voir le flux de contrôle en action. Cela va vous surprendre. – dankohn