Как решить ".потом это не функция" с помощью node-7zip - PullRequest
0 голосов
/ 12 мая 2019

Я использую node.js (приложение Electron) для обработки нескольких 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 is not function», когда пытаюсь запустить код.

Поиски в Google и StackOverFlow не нашли решения.

1 Ответ

0 голосов
/ 12 мая 2019

Хотя я не знаю, почему исходное сообщение, которое я сделал выше, выдает ошибку, я нашел решение, которое работает для меня, используя событие из библиотеки 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 ) ;
        }
    }) ;
}

Возможноэтот подход также будет полезен для кого-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...