node.jsが非同期呼び出しの開始/完了の順序を保証するかどうか疑問に思っています。
私はそうは思いませんが、非同期呼び出しが予期した順序で完了しない可能性があるため、バグがあると思われるインターネット上のコードサンプルをいくつか読みましたが、例はノードがどれほど優れているかという文脈で述べられていることがよくありますシングルスレッドの非同期モデルのためです。ただし、この一般的な質問に対する直接的な答えは見つかりません。
異なるノードモジュールが異なる保証をするという状況ですか? たとえば、https://stackoverflow.com/a/8018371/1072626の回答では、Redis を含む非同期呼び出しが順序を保持していると明確に述べています。
この問題の核心は、次の実行 (または類似の実行) がノードで厳密に安全であるかどうかに要約できます。
var fs = require("fs");
fs.unlink("/tmp/test.png");
fs.rename("/tmp/image1.png", "/tmp/test.png");
作成者によると、unlink
既存のファイルがある場合、Windows では名前の変更が失敗するため、への呼び出しが必要です。ただし、どちらの呼び出しも非同期であるため、非同期操作が開始される前に非同期 I/O が確実に完了するように、への呼び出しをrename
のコールバックに含める必要があると最初に考えました。unlink
rename
rename