【发布时间】:2017-01-07 05:29:38
【问题描述】:
我有以下代码,所有代码都在指定函数myFunc 中实现,我需要所有函数都将完成(myFunc),即当文件被成功提取/或不提取到返回一些状态(成功/错误)。
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";
}
});
};
由于这个开源正在处理事件,这是一个问题(获取返回状态......)我的意图是通过 promisify 或 如下:
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";
}
});
};
我的问题是:
- 由于我不是 JS 方面的专家,将事件转换为承诺是否有意义?
- 还有其他 我可以将其用于用例的好解决方案?
【问题讨论】:
-
是的,如果您希望您的调用者能够等待(单个)
extract事件,那么返回一个承诺是绝对有意义的。 -
您应该将
err传递给reject() -
@Bergi 我怀疑 OP 不是代码的所有者。这将是 Code Review 的一个问题。
-
您应该使用
jszip进行检查,它会负责阅读 zip 并为您返回承诺。它也得到了维护。 -
@Bergi - 非常感谢 :) ,如果错误符合我的要求,我就像这样拒绝(错误);但如果我需要不同的文本,我使用拒绝(新错误(“新文本”)可以吗?
标签: javascript node.js promise bluebird eventemitter