我想知道 node.js 是否对异步调用开始/完成的顺序做出任何保证。
我不认为是这样,但是我已经阅读了 Internet 上的一些代码示例,我认为这些代码示例有问题,因为异步调用可能不会按预期的顺序完成,但是这些示例通常在节点有多棒的上下文中说明因为它的单线程异步模型。但是,我找不到这个一般问题的直接答案。
是不是不同节点模块做出不同保证的情况?例如在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
以确保异步 I/O 在异步rename
操作开始之前完成,否则rename
可能会先执行,导致错误。