新手到节点在这里。我正在尝试下载一个.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);
事实证明,
error
事件正在触发,但finish
没有触发。这修复了它:
function extractToDirectory(url, directory, callback)
{
return downloadRaw(url)
.pipe(new xz.Decompressor())
.pipe(tar.Extract(directory))
.on('error', callback)
.on('finish', callback);
}