新手求教!循环writeFile操作,为什么写入的数据顺序是随机的?
发布于 3 年前 作者 blogwy 3219 次浏览 来自 问答

先说一下,我是个新手。因为知道node里面都是异步的。然后就自己测试一下。然后发现: for循环里面套一个writeFile,循环给一个文件里面写入数据,写入方式是追加,我用只执行函数处理异步。发现每次执行时候最后结果好像都是随机的。我在控制台打印出来的也是随机的和写入的结果没有联系。这是我的代码。 var fs = require(‘fs’); for(var i=0; i<5; i++){ (function (i) { var data = 我第${i+1}次写入\r\n; fs.writeFile(‘test.txt’, data,{flag:‘a’}, function (err, data) { if(!err){ console.log(第${i+1}次写入成功); } });
})(i); } 用同步写writeFile是完全正常的。 然后我又写了一遍循环readfile,发现readfile正常,顺序完全正确。下面是readfile的代码。 for(var i=0; i < files.length; i++) { (function(i) { fs.readFile(files[i], ‘utf-8’, function(err, contents) { console.log(files[i] + ': ’ + contents); }); })(i); } 求大佬给我解释一下!!!!小弟感激不尽

10 回复

异步当然不可能是顺序的执行下去了 就像一个队列的人走路,同步,就是一队列人跟着前面的脚步走,前快后快,前慢后慢,这样队伍到达的顺序还是原来的顺序;但是异步呢,就不是按照队列走了,你前面走的慢,这时候后面走的快的人就不等你了,直接超越你往前走,这样到最后的时候,就会造成到达的顺序和之前的顺序是不一样的; 以上是我的理解,多多指教!

建议看一下事件循环机制

异步啊,就是随机顺序的

map promise, for…of

writeFileSync就是按照顺序了。 这是同步异步函数的原因

@falost 谢谢解答,我一直以为异步也是按顺序的

@waitingsong 谢谢,受教了!我一直以为异步也是按顺序的

回到顶部