如何使用node-7zip解决“ .then不是函数”

时间:2019-05-12 19:47:24

标签: node.js electron

我正在使用node.js(电子应用程序)来处理许多ZIP存档,并且正在使用node-7zip和7zip-bin库。为了处理应用程序逻辑所需的一个文件接一个文件,我编写了以下递归函数:

function processArchive(pdscQueue, archiveFilename, repoPath) {
    let tempFolder = tmp.dirSync() ;
    let devicePackFile = path.join(repoPath,archiveFilename) ;   // Create a temp folder for the extacted data
    sevenZip.extractFull(devicePackFile, tempFolder.name, { $bin: pathTo7zip})

    .then( function () {
        //
        // Process the file here ...
        //
        tempFolder.removeCallback() ;   // Clean up
        //
        // Check if there are more to process
        //
        if ( pdscQueue.isEmpty()) {
            return ;
        } else {
            processArchive(pdscQueue, pdscQueue.dequeue(), repoPath ) ;
        }
    });
}

我遇到的问题是,当我尝试运行代码时得到“ .then不是一个函数”。

Google和StackOverFlow搜索都没有找到解决方案。

1 个答案:

答案 0 :(得分:0)

虽然我不知道为什么我在上面发表的原始文章中给出了错误,但是我已经找到了一种解决方案,该解决方案可以通过使用node-7zip库中的事件来为我工作:

function processArchive(pdscQueue, archiveFilename, repoPath) {
    let tempFolder = tmp.dirSync() ;
    let devicePackFile = path.join(repoPath,archiveFilename) ;   // Create a temp folder for the extacted data
    let theStream = sevenZip.extractFull(devicePackFile, tempFolder.name, { $bin: pathTo7zip}) ;

    theStream.on('end', () => {
        //
        // Process the file here ...
        //
        tempFolder.removeCallback() ;   // Clean up
        //
        // Check if there are more to process
        //
        if ( pdscQueue.isEmpty()) {
            return ;
        } else {
            processArchive(pdscQueue, pdscQueue.dequeue(), repoPath ) ;
        }
    }) ;
}

也许这种方法对其他人也有用。