は、私たちがこのようなプログラムがあるとします。同じファイルに複数のfs.writeを追加して実行の順序を保証できますか?
// 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"}});
}
私の質問は本当に実行される)fs.writeは非同期関数であるので、私は、それぞれが(fs.writeするために呼び出す方法がわからない、will string1 to string1000 be gurantted to append to the same file in order?
です。私は各文字列のための関数の呼び出しは、callstack
のようなanother thread
のどこかに置く必要があり、前回の呼び出しが完了すると次の呼び出しを実行できると仮定します。
私の理解が正確であるかどうかはわかりません。コメントと回答のように
編集1
、私はfs.write
がcallback
を待たずに同じファイルに複数の書き込みのために安全ではありません参照してください。しかし、書き込みストリームについてはどうですか?
次のコードを使用すると、書面の順序が保証されますか?
// 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();
コメントや修正は参考になります。ありがとう!
を読むことができます) '(https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback)、ドキュメントには、「同じファイルに対して' fs.writeFile'を何度も使用するのは安全ではありませんコールバック "_。 – robertklep
node.jsでのバッファリングの仕組みにより、コールバックを待つことなく、順序や書き込みに影響を与えないことに注意してください。安全でないのは、バッファオーバーフローの可能性です。だから、リスクは書き込みがなくなっていて、順序付けされていない書き込みではありません。 – slebetman
@slebetman、返信ありがとうございます。しかし、ここでバッファーとはどういう意味ですか? – Lubor