基本上,我有一个table
文件正在从中删除所有元音,除非它不包含辅音。新单词将附加到新的3000.txt
文件中。
但是,有些单词完全丢失,而另一些单词则缺少一些辅音。我怀疑这是由于脚本添加到文件的速度过快。
因此,我想插入20 ms或任何合适的延迟时间。这只是一个家庭游戏脚本,我不在乎它是否有效。
TMP.txt
答案 0 :(得分:2)
我不确定延迟是否会起作用,但是我注意到您在循环中使用appendFile,也许您应该使用字符串代替,并在完成后调用一次appendFile。 否则,我建议使用appendFileSync或等待appendFile。 抱歉,这是我的代码示例。
var fs = require("fs");
var words = fs.readFileSync("3000.txt").toString();
words = words.split("\n");
var vowels = /[aeiouy]/;
var consonants = /[bcdfghjklmnpqrstvxz]/;
var TMPword = "";
let str = '';
for(var testword of words)
{
if(testword.match(vowels))
{
if(testword.match(consonants))
{
TMPword = testword.replace(/a|e|i|o|u|y/g,'')
str += TMPword;
}
continue;
}
//Delay goes here//
}
fs.appendFile("TMP.txt", str, function (err, file) {if(err) throw err;} );
或
fs.appendFileSync("TMP.txt", TMPword);
或
await fs.appendFile("TMP.txt", TMPword, function (err, file) {if(err) throw err;} ); // function must be with async
答案 1 :(得分:2)
您需要等到appendFile
回调被调用后才能继续下一个调用。有几种方法可以做到这一点,但是这个异步循环应该可以解决问题:
var fs = require("fs");
var words = fs.readFileSync("3000.txt").toString();
words = words.split("\n");
var vowels = /[aeiouy]/;
var consonants = /[bcdfghjklmnpqrstvxz]/;
function loop(words) {
if (!words.length) return; // All done
var word = words.shift().replace(/a|e|i|o|u|y/g, '');
fs.appendFile("TMP.txt", word, function (err, file) {
if(err) throw err;
loop(words); // Only process next after completing this one
});
}
// Only retain words that pass the conditions:
words = words.filter(testword => testword.match(vowels) && testword.match(consonants));
// Start asynchronous loop
loop(words);
答案 2 :(得分:1)
也许setTimeout可以在这里帮助您?
setTimeout(function(){ console.log('foo'); }, 3000);
1000毫秒= 1秒;
或ES6语法
setTimeout( ()=> console.log('foo'), 3000 )