先说一下,我是个新手。因为知道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);
}
求大佬给我解释一下!!!!小弟感激不尽
异步当然不可能是顺序的执行下去了 就像一个队列的人走路,同步,就是一队列人跟着前面的脚步走,前快后快,前慢后慢,这样队伍到达的顺序还是原来的顺序;但是异步呢,就不是按照队列走了,你前面走的慢,这时候后面走的快的人就不等你了,直接超越你往前走,这样到最后的时候,就会造成到达的顺序和之前的顺序是不一样的; 以上是我的理解,多多指教!
建议看一下事件循环机制
异步啊,就是随机顺序的
map promise, for…of
writeFileSync就是按照顺序了。 这是同步异步函数的原因
@falost 谢谢解答,我一直以为异步也是按顺序的
@yuwanlin 谢谢
@waitingsong 谢谢,受教了!我一直以为异步也是按顺序的
@waitingsong 谢谢
@18820227745 谢了