有一组 Markdown 文档,用户请求、渲染、输出 HTML。
request /a => load /path/
a.md => render => HTML => user
request /enoent => load /path/
enoent.md => 404 => user
我希望实现一个可以动态更新的功能,
1. buffer => tmpfile
2. mv /path/foo => /history/bar
3. mv tmpfile => /path/foo
如果在 2、3 之间加载 /path/foo,那么可能会导致一个 404 错误。如果我同步而不是异步重命名,能解决这个问题吗?
fs.renameSync('/path/foo', '/history/bar');
fs.renameSync('tmpfile', '/path/foo');
我担心的问题是,如果之前已经有请求异步的读取 /path/foo,然后因为操作系统的调度原因,拖到 2、3 之间执行。这种情况可能发生吗?
1. fs.readFile('/path/foo', cb);
2. fs.renameSync('/path/foo', '/history/bar');
3. OS reads file /path/foo => not found => ENOENT
4. call cb of step 1.
5. fs.renameSync('tmpfile', '/path/foo');
以及,有没有异步更新该文件的方法?我想到的是建立一个 fs layer,当更新操作到达之后,block 所有对该文件的访问,直至更新结束后。但是似乎太复杂了啊…………
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/111364
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.