为什么在此 Node.js 代码中不触发"finish"事件?



新手到节点在这里。我正在尝试下载一个.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);
}

相关内容

  • 没有找到相关文章

最新更新