我正在使用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搜索都没有找到解决方案。
答案 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 ) ;
}
}) ;
}
也许这种方法对其他人也有用。