【发布时间】:2015-02-24 20:25:04
【问题描述】:
我有以下代码:
for (var i = 0; i < files.length; i++) {
var data = fs.readFileSync(files[i]);
fs.appendFileSync("file_part", data);
}
假设我有 1000 个文件。它是for循环异步吗?或者我的应用程序将等到它完成该过程?
如果它同步,我如何使它异步?所以每次迭代都是异步的?
编辑:
此代码是服务器代码的一部分,使用 express。我们收到很多 https 请求,并为客户服务。其中一项操作是将 1MB 的文件附加到一个大文件中。如果操作成功,服务器应该返回 200,否则返回 500。
问题是如果上面的代码(for循环)被执行,express模块停止服务其他客户端,并且它“忙于”这个请求。我尝试使用async.eachSeries(因为文件的顺序有含义,所以我必须使用Series方法),但它仍然卡在服务器上。
【问题讨论】:
-
它是同步的,因为您使用的是同步方法。如果要使其异步,请阅读documentation 并改用异步方法。
-
如果要让它异步,你真的要并行打开1000个文件吗?还是您希望它们按顺序执行?如果是这样,您已有的解决方案有什么问题?
-
你那里似乎有一个流浪者
)。这段代码还能运行吗? -
@Bergi:我编辑问题并解释我的解决方案有什么问题。
标签: javascript node.js asynchronous