使用 promise 代替事件回调

Using promise instead of events Call back

我有以下代码,所有代码都在指定函数 myFunc 中实现,我需要所有函数完成 (myFunc) 即当文件被提取时 successfully/or 不是 return 某些状态(成功/错误)。

var myFunc = () => {

var DecompressZip = require('decompress-zip');
var unzipper = new DecompressZip(filename)

unzipper.on('error', function (err) {
    console.log('Caught an error');
});

unzipper.on('extract', function (log) {
    console.log('Finished extracting');
});

unzipper.on('progress', function (fileIndex, fileCount) {
    console.log('Extracted file ' + (fileIndex + 1) + ' of ' + fileCount);
});

unzipper.extract({
    path: 'some/path',
    filter: function (file) {
        return file.type !== "SymbolicLink";
    }
});

};

由于这个开源正在处理事件,这是一个问题(要获得 return 状态...)我打算将其更改为通过 promisify 或 promise 如下所示:

   var myFunc = () => {
    
   return new Promise(function(resolve, reject) {
    var DecompressZip = require('decompress-zip');
    var unzipper = new DecompressZip(filename)
    
    unzipper.on('error', function (err) {
        console.log('Caught an error');
        reject();
    });
    
    unzipper.on('extract', function (log) {
        console.log('Finished extracting');
        resolve();
    });
    
    unzipper.on('progress', function (fileIndex, fileCount) {
        console.log('Extracted file ' + (fileIndex + 1) + ' of ' + fileCount);
    });
    
    unzipper.extract({
        path: 'some/path',
        filter: function (file) {
            return file.type !== "SymbolicLink";
        }
    });
    
    };

我的问题是:

  1. 因为我不太精通 JS 将事件转换为 promise 有意义吗?
  2. 还有其他 我可以将其用于用例的好解决方案?

这是OP https://github.com/bower/decompress-zip

只有当您绝对肯定 "end" 事件只会触发一次时,将事件转换为承诺才有意义。

所以在这种情况下,是的,你对实施的建议应该有效(假设我正确理解你的代码)。

1) 是的,将此类事件转换为 Promise 非常有意义。目前,不同的库有不同的事件表达方式(事件、消息、回调函数、然后是错误回调函数、异常、错误代码等等)。 Promises 将很快统一所有这些,现在它们是 Javascript 标准。因此,在您正在使用的库周围放置一个 Promise 层并在您的代码中仅使用 Promise 而不是旧的混乱是一个很好的做法。

2) 我觉得你的解决方案不错。