我使用的是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]);
}
}
1条答案
按热度按时间vyu0f0g11#
使用async/await可以帮助实现承诺,并按顺序运行内容
不确定这是否有帮助: