1

モデルに追加したいデータが各行に含まれている多くの .txt ファイルがあり、クエリの準備ができています。問題は、おそらくライブラリの非同期性が原因で、「挿入」クエリが実行されていないことです。

ここに私が持っているものがあります:

// 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);

各データ オブジェクトがデータベースに正常に追加されるようにするにはどうすればよいですか?

コードは次のとおりです。

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;
        });
    }

 }

lodash の forEach メソッドを使用してループを反復しようとしましたが、両方のメソッドが Location.build() をスキップしているようです

4

1 に答える 1

0

実際のコードを見ないとなんとも言えませんが内側のループが実行される前に外側のループが実際に終了するように、ループに fs.readFileSync を使用するか、できれば async.each または async.auto を使用してみてください。

于 2013-05-27T09:32:12.820 に答える