Załóżmy, że mamy taki program:Czy wiele fs.write do dołączenia do tego samego pliku gwarantuje kolejność wykonywania?
// imagine the string1 to string1000 are very long strings, which will take a while to be written to file system
var arr = ["string1",...,"string1000"];
for (let i = 1; i < 1000; i++) {
fs.write("./same/path/file.txt", arr[i], {flag: "a"}});
}
Moje pytanie brzmi, will string1 to string1000 be gurantted to append to the same file in order?
Od fs.write jest funkcja asynchroniczny, nie jestem pewien, jak każde wywołanie fs.write() jest rzeczywiście wykonywana. Zakładam, że wywołanie funkcji dla każdego ciągu powinno być umieszczone gdzieś w another thread
(jak callstack
?) I po wykonaniu poprzedniego połączenia można wykonać następne połączenie.
Nie jestem pewien, czy moje zrozumienie jest prawidłowe.
Edycja 1
jak w komentarzach i odpowiedziach, widzę fs.write
nie jest bezpieczny do wielokrotnego zapisu do tego samego pliku, nie czekając na callback
. Ale co z pisanym strumieniem?
Czy użycie następującego kodu zagwarantuje kolejność pisania?
// imagine the string1 to string1000 are very long strings, which will take a while to be written to file system
var arr = ["string1",...,"string1000"];
var fileStream = fs.createWriteFileStream("./same/path/file.txt", { "flags": "a+" });
for (let i = 1; i < 1000; i++) {
fileStream.write(arr[i]);
}
fileStream.on("error",() => {// do something});
fileStream.on("finish",() => {// do something});
fileStream.end();
Wszelkie komentarze i poprawki będą pomocne! Dzięki!
Jeśli masz na myśli [ 'fs.writeFile () '] (https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback), a następnie dokumentacja stwierdza, że _" ... nie jest bezpieczne używanie 'fs.writeFile' wiele razy na tym samym pliku bez oczekiwania na wywołanie zwrotne "_. – robertklep
Należy pamiętać, że ze względu na sposób działania buforowania w pliku node.js, oczekiwanie na oddzwonienie nie ma wpływu na kolejność lub zapisywanie. Niebezpieczna jest możliwość przepełnienia bufora. Tak więc ryzyko nie zawiera zapisów, a nie nieuporządkowanych zapisów. – slebetman
@slebetman, Dzięki za odpowiedź. Ale co naprawdę oznacza tu bufor? – Lubor