我想知道,如果node.js訂單異步調用啓動/完成作出任何保證。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上,如果有一個預先存在的文件失敗。然而,這兩種調用是異步的,所以我最初的想法是在調用rename
應在unlink
回調,以保證異步rename
操作開始之前,否則可能rename
先執行,導致錯誤的I/O完成異步。
取消鏈接將在重命名之前執行,但重命名不保證在取消鏈接完成後執行,除非重命名在取消鏈接的回調中。 –
值得注意的是,Redis是一個特例;它一次只運行一個命令,而Node.js驅動程序是爲了利用這個事實而編寫的。 –
@BrandonTilley謝謝,這說明模塊之間存在差異,並且通常我的理解是正確的。 – vossad01