【发布时间】:2021-01-06 01:06:55
【问题描述】:
我正在尝试使用 webdav 从 nextcloud 上的文件夹下载一些文件。 我想遍历文件夹并下载其中的所有文件,这是我的代码:
let dir = "/foo"
let folder = await WebDav.getDirectoryContents("bar")
文件夹以数组形式返回
for (let i = 0; i < folder.length; i++) {
await WebDav.createReadStream(folder[0].filename).pipe(
fs.createWriteStream(`${dir}/${folder[0].basename}`)
);
}
});
这些文件是用正确的名称创建的,但其中没有内容,并且它们的大小为零 KBs
但是当我将管道放在 for 循环之外时,它可以正常工作并下载文件。
【问题讨论】:
-
您正在尝试
await xxx.pipe(),但.pipe()没有返回承诺,因此await将无用。通常,流不直接与 Promise 一起使用。流没有内置对 Promise 的支持。您必须自己包装它们并将各种事件处理程序连接到一个承诺。或使用stream.pipeline()并承诺。零大小是因为您的for循环在文件写入之前完成,因此您可能试图在文件写入之前使用它们,因为await没有任何用处。
标签: javascript node.js webdav nextcloud