gpt4 book ai didi

javascript - Node.js/for 循环是异步的吗?

转载 作者:行者123 更新时间:2023-12-03 10:43:09 25 4
gpt4 key购买 nike

我有以下代码:

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方法),但它仍然卡住服务器。

最佳答案

JS中所有的控制结构都是同步执行的。由于您在循环体中没有使用异步函数(而是显式同步函数),因此它将等待它们完成任务。

<小时/>

要使代码片段非阻塞,您需要使用常规异步 fs 方法,并适本地链接它们。我会推荐 Promise,但如果你已经在使用 ,那么它应该看起来像这样:

async.eachSeries(files, function(file, cb) {
fs.readFile(file, function(err, data) {
if (err) return cb(err);
fs.appendFile("file_part", data, cb);
});
}, function(err) {
// call back to express here with 500 if err and 200 otherwise
});

关于javascript - Node.js/for 循环是异步的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28682265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com