我有以下代码,所有代码都是在指定函数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,将事件转换为 Promise 是否有意义?
- 还有其他的 我可以将其用于用例的好解决方案吗?
最佳答案
1) 是的,将此类事件转换为 Promise 是非常有意义的。目前,不同的库有不同的表达事件的方式(事件、消息、回调函数,然后是错误回调函数、异常、错误代码等)。 Promise 很快就会统一这一切,现在它们已成为 Javascript 标准。因此,最好的做法是在您正在使用的库周围放置一个 Promise 层,并在代码中仅使用 Promise,而不是使用旧的困惑。
2)你的解决方案对我来说看起来不错。
关于javascript - 使用 Promise 代替事件回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39235798/