Я изучаю nodejs. Мне сложно понять, как работают асинхронные функции. Мой вопрос связан с приведенным ниже кодом. Я пытаюсь сделать следующее в следующем точно таком же порядке:Понимание асинхронных функций в node.js
- Открыть файл a.txt.
- Прочтите.
- Распечатать содержание.
- Закройте его и запишите, что файл был закрыт.
- Открыть его снова.
- Перезаписать его новым контентом.
Проблема в том, что в соответствии с выходом, который я получаю, кажется, что я не контролирую последовательность этих событий. Это выход я получаю в консоли:
просто читать 21 байт/это мои тестовые файлы/только что написал 30 байт/файл близко и готов к записи
Итак, как вы можете видеть, для некоторых причина, по которой программа записывает в файл до того, как он зарегистрирует, что файл был закрыт. Я пытался закрыть его, зарегистрировать, что он был закрыт, а затем записать в файл.
Таким образом, я думаю, что у меня есть проблема с управлением потоком событий. Можете ли вы указать, что я делаю неправильно?
этого код:
var fs = require('fs');
//What I am trying to do here is: open a file a.txt, read it, print its content and then //close the file and log that it has been closed.
//Then, open it again and overwrite it.
fs.open('a.txt', 'r', function(err, fd){
if(err){throw err;}
var readBuffer = new Buffer(1024);
var bufferOffset = 0;
var filePosition = 0;
var readBufferLength = readBuffer.length;
fs.read(fd, readBuffer, bufferOffset, readBufferLength, filePosition, function(err, readBytes){
if(err){throw err;}
console.log('just read ' + readBytes + ' bytes');
console.log(readBuffer.slice(0,readBytes).toString());
fs.close(fd,function(){
console.log('file close and ready for write');
});
});
});
fs.open('a.txt', 'r+', function(err,fd){
if(err){throw err;}
var writeBuffer = new Buffer('saul lugo overwrote this file!');
var bufferOffset = 0;
var writeBufferLength = writeBuffer.length;
var filePosition = null;
fs.write(fd, writeBuffer, bufferOffset, writeBufferLength, filePosition, function(err, writeBytes){
if(err){throw err;}
if(writeBytes>0){
console.log('just wrote ' + writeBytes + ' bytes.');
}
});
});