max-mapper / extract-zip

Zip extraction written in pure JavaScript. Extracts a zip into a directory.
BSD 2-Clause "Simplified" License
388 stars 126 forks source link

UnhandledPromiseRejection #131

Closed dardaiin closed 2 months ago

dardaiin commented 2 years ago

I'm having an issue with UnhandledPromiseRejection

Here is the logs:

2022-05-02T13:37:33.540603404Z 13:37:33 0|content-server-start  | (node:63) UnhandledPromiseRejectionWarning: Error: ENOENT: no such file or directory, unlink '/home/site/wwwroot/sha/3019ea795e/webapp.zip'

2022-05-02T13:37:33.541663510Z 13:37:33 0|content-server-start  | (node:63) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)

2022-05-02T13:37:33.542437015Z 13:37:33 0|content-server-start  | (node:63) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

The code:

async function unzipFile(filepath) {
    if(!ZIP_FILES_IN_PROGRESS[filepath]) {
        const start = Date.now();

        // eslint-disable-next-line
        console.log('');
        // eslint-disable-next-line
        console.log(`Unpacking zip file: ${filepath}`);

        ZIP_FILES_IN_PROGRESS[filepath] = true;

        try {
            await FS.promises.writeFile(Path.join(Path.dirname(filepath), 'index.html'), 'Unpacking zip file..')
            await ExtractZip(filepath, { dir: Path.dirname(filepath) });
            await FS.promises.unlink(filepath);
         } catch(error) {
           if(error.code === 'EBUSY') {
              console.log(`Resource: ${filepath} busy or locked, will try again...`);
           } else {
             throw error; 
           }
         }

        delete ZIP_FILES_IN_PROGRESS[filepath];

        // eslint-disable-next-line
        console.log(`Finished unpacking zip file: ${filepath} (${(Date.now() - start)}ms)`);
    }
}