Node.js 删除承诺并使其异步
我试图让这个函数等待压缩完成。但是,异步版本不起作用。但承诺版本是正确的。我错过了什么 这是我的工作Node.js 删除承诺并使其异步,node.js,Node.js,我试图让这个函数等待压缩完成。但是,异步版本不起作用。但承诺版本是正确的。我错过了什么 这是我的工作 const unzipFile = (element) => { var csvName = element.slice(0, -3); console.log(appRoot + "\\" + csvName); return new Promise((resolve, reject) => { gunzip(appRoot + "\\" + element,
const unzipFile = (element) => {
var csvName = element.slice(0, -3);
console.log(appRoot + "\\" + csvName);
return new Promise((resolve, reject) => {
gunzip(appRoot + "\\" + element, appRoot + "\\csv\\" + csvName, () => {
console.log("gunzip done!");
resolve();
});
});
};
这是行不通的
const unzipFile = async (element) => {
var csvName = element.slice(0, -3);
console.log(appRoot + "\\" + csvName);
const result = await gunzip(appRoot + "\\" + element, appRoot + "\\csv\\" + csvName)
console.log("gunzip done!", result);
return result;
};
如评论所述。gunzip文件不支持承诺。然而,Promisify将修复该问题,并使使用async/await成为可能
const util = require('util'); //Promisify
const gunzip = require("gunzip-file");
const promiseGunzip = util.promisify(gunzip);
const unzipFile = async (element) => {
var csvName = element.slice(0, -3);
console.log(appRoot + "\\" + csvName);
//Use promise version instead
const result = await promiseGunzip(appRoot + "\\" + element, appRoot + "\\csv\\" + csvName)
console.log("gunzip done!");
return result;
};
wait
等待承诺,而不是回电你的问题有一个很好的开始:它包括你尝试了什么,成功了什么,失败了什么。唯一缺少的是您用于gunzip
的确切软件包及其版本。根据这一点,库可以“在不传递回调的情况下支持承诺”,也可以不支持。制作一个版本的gunzip
,以便您可以像bambam提到的那样等待它。