gpt4 book ai didi

javascript - 为什么此 Node.js 代码中没有触发 'finish' 事件?

转载 作者:太空宇宙 更新时间:2023-11-03 22:32:17 25 4
gpt4 key购买 nike

这里是 Node 新手。我正在尝试下载 .tar.xz 文件并通过下面所示的代码将其解压到目录中:

var request = require('request');
var tar = require('tar');
var xz = require('xz');

function downloadRaw(url, callback)
{
return request({
encoding: null,
url: url
}, callback);
}

function extractToDirectory(url, directory, callback)
{
return downloadRaw(url)
.pipe(new xz.Decompressor())
.pipe(tar.Extract(directory))
.on('finish', callback);
}

出于某种原因,即使在完成提取存档内容之后,tar 流上的 'finish' 事件似乎也没有触发。 tar是一个由 npm 自己维护的库,所以我认为我在这里犯了某种错误。无论如何,为什么会发生这种情况以及我可以采取什么措施来解决它?

最佳答案

我看到 downloadRaw 需要一个回调,但您从未将其传递给它,因此您将一个未定义的值传递给请求函数。

如果您想使用流 API,则不要将回调传递给这两个函数。

事实上,为什么要为这个原始函数烦恼呢?为什么不这样做:

return request(url)
.pipe(newxz.Decompressor())
.pipe(tar.Extract(directory))
.on('finish', callback);

关于javascript - 为什么此 Node.js 代码中没有触发 'finish' 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34981811/

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