重构承诺从函数返回

Rob*_*Rob 1 javascript asynchronous async-await

我正在使用JSZip解压缩运行异步的目录.我想编写一个解压缩文件并返回与之关联的文件的函数,如下所示:

function unzipFile(filename){
  const zipper = new jsZip()
  return fs.readFile(filename, function(err, data) {
    return jsZip.loadAsync(data).then(function(zip) {
      return zip.files
    })
  })
}
Run Code Online (Sandbox Code Playgroud)

但这只是回归undefined.我如何使这个异步,以便它在单个函数中返回解压缩的目录,如果我想设置一个等于其输出的变量将等待它的完成?

Jar*_*a X 5

你需要首先宣传fs.readFile- 然后只是一个普通的Promise链就可以做到这一点

例如

function unzipFile(filename){
    return new Promise((resolve, reject) => fs.readFile(filename, function(err, data) {
        if(err) {
            return reject(err);
        }
        resolve(data);
    }))
    .then(data => new jsZip().loadAsync(data))
    .then(zip => zip.files);
}
Run Code Online (Sandbox Code Playgroud)