如何在Ember.js中执行顺序for循环?

gorkyyrv  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(122)

我使用的是ember 2.1,我会对我使用Javascript FileReader API得到的文本文件的每一行应用一个操作。有人知道怎么做吗?

  • 当我尝试使用“foreach”时,执行不是连续的:在开始处理下一行之前,程序不等待一行被记录;因此我跳过了一些行,无法控制执行;
  • 我尝试了一个简单的for循环,但它不工作,我读到他们是不可能在ember行动;
  • 当我使用递归调用Ember操作时(在以下代码中:saveNew(行),首先由 openFile(事件) 调用),另一个问题发生:每一新行替换最后一行,而不是添加到最后一行,并且在结尾处仅记录最后一行。
saveNew(lines) {
    const promise1 = new Promise((resolve, reject) => {

      var line = lines.shift();
      var cols = line.split(';');
      var c = 0;
      var patt = /[A-z ]/g;
      var result = patt.test(line);
      if (result == true) {

        this.model.name = cols[0];
        console.log("named");
        this.model.url = cols[1];
        console.log("urled");
        this.model.description = cols[2];
        console.log("descripted");
        console.log(cols[2]);
        this.get('model').save().then((source) => {
          console.log("in the insertion");

          this.send('toast', 'Source créée.');
          console.log("wooouu");
          this.transitionToRoute('signed-in.sources.source', source);
          console.log("incredible");

        }).then(() => {
          setTimeout(() => {
            resolve(lines);
          }, 1000);
        });
      } else {
        resolve(lines);
      }
    });

    promise1.then((value) => {
      if (value.length > 0) {
        this.send('saveNew', value);
      }
    });
  },

  openFile(event) {
    console.log('upload');
    var input = event.target;
    var reader = new FileReader();
    console.log('ici');

    reader.addEventListener("load", (function(e) {
      var text = e.target.result;
      text.replace(/(\r\n)|\r|\n/g, '\n'); //normalisation des caractères de retour à la ligne
      var lines = text.split(/\n+/g); //séparation du texte du fichier en lignes
      var insnumb = 0;
      const taille = lines.length;
      this.send('saveNew', lines);
    }).bind(this));
    reader.readAsText(input.files[0]);
  }
}
vyu0f0g1

vyu0f0g11#

使用async/await可以帮助实现承诺,并按顺序运行内容
不确定这是否有帮助:

var e = {
  async saveNew (lines) {
    const pattern = /[A-z ]/g

    for (const line of lines) {
      if (pattern.test(line)) {
        const cols = line.split(';')

        this.model.name = cols[0]
        this.model.url = cols[1]
        this.model.description = cols[2]

        const source = await this.get('model').save()
        this.send('toast', 'Source créée.')
        this.transitionToRoute('signed-in.sources.source', source)
      }
    }
  },

  async openFile (event) {
    const [file] = event.target.files
    if (!file) return
    const text = await file.text()
    // Normalisation des caractères de retour à la ligne
    text.replace(/(\r\n)|\r|\n/g, '\n') 
    // Séparation du texte du fichier en lignes
    const lines = text.split(/\n+/g)
    this.send('saveNew', lines)
  }
}

相关问题