首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待fs.promises列表

等待fs.promises列表
EN

Stack Overflow用户
提问于 2021-07-14 05:25:53
回答 1查看 156关注 0票数 2

我想验证我是否正在正确地等待fs.promises。

我在一个名为res的地图中有条目,我想将它写到一个文件中。

我确信这将等待他们:

代码语言:javascript
复制
for(let [path, content] of res.entries()) {
   await fs.promises.writeFile(path, content)
}

但是这样做效率很低,所以我很好奇这样做是否有效:

代码语言:javascript
复制
let promises = []
for(let [path, context] of res.entries()) {
   promises.push( fs.promises.writeFile(path, content) );
}
await Promise.all(promises)

我不确定第二个示例是否有效的原因是因为writeFile只是一个异步函数,所以我不确定await是否真的在等待什么。

其他的选择是做一些花哨的事情,让这样一条线成为可能的Promise(fs.writeFile(...)) (不可能)等待它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-14 05:47:04

是的,只要您要写入的所有文件都是单独的文件(不对同一个文件进行重叠写入),那么Promise.all()的第二个片段就可以工作,因此所有文件都可以并行完成。

fs.promises.writeFile()返回一个承诺,该承诺将在操作完成时解决,因此您的promises数组将是一个承诺数组,这正是Promise.all()所期望的。

来自医生 for fs.promises.writeFile()的说明

返回:<Promise>。成功时充满未定义的东西。

注意,当写入同一磁盘上的多个文件时,实际可以获得多大的并行性,这是有限制的,因为所有写操作都必须通过相同的磁盘控制器、同一总线和(如果是旋转磁盘)磁头一次只能在一个轨道上。

此外,nodejs使用线程池进行磁盘操作,它只使用少量线程进行同步请求。操作系统和nodejs将为您处理所有这些问题(通过排队写入直到轮到他们为止),这样做没有危险,但是并行编写20个文件可能并不比按顺序写入它们快20倍,但是并行写入应该更快。因此,如果代码允许并行运行,这是编写代码的理想方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68372484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档