首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待一个可读的流ES8 TypeScript的完成,fs

等待一个可读的流ES8 TypeScript的完成,fs
EN

Stack Overflow用户
提问于 2021-11-01 14:08:45
回答 1查看 38关注 0票数 0

我的代码不能工作,因为在下一行执行之前,文件没有被解压。这是我的解压函数:

代码语言:javascript
复制
import { createGunzip } from 'zlib';
import { createReadStream, statSync, createWriteStream } from 'fs';

function fileExists(filePath: string) {
  try {
    return statSync(filePath).isFile();
  } catch (err) {
    return false;
  }
}

async function gunzipFile(source: string, destination: string): Promise<void> {
  if (!fileExists(source)) {
    console.error(`the source: ${source} does not exist`);
    return;
  }
  const src = createReadStream(source);
  const dest = createWriteStream(destination);
  await src.pipe(createGunzip())
    .pipe(dest)
    .on('error', (error) => {
      // error logging
    })
    .on('end', () => {
      return;
    });
}

我如何重构它才能让它异步地正常工作?或非异步(如果它将等待完成)。还有类似的问题,但它们对我不起作用,可能是因为这个函数返回void,而不是已经流式传输的数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-02 01:28:07

src.pipe没有返回一个承诺,那么你就不能等待它。让我们将其转换为Promise:

代码语言:javascript
复制
function gunzipFile(source: string, destination: string): Promise<void> {
  if (!fileExists(source)) {
    console.error(`the source: ${source} does not exist`);
    return;
  }
  const src = createReadStream(source);
  const dest = createWriteStream(destination);

  return new Promise((resolve, reject) => { // return Promise void
    src.pipe(createGunzip())
      .pipe(dest)
      .on('error', (error) => {
        // error logging
        // reject(error); // throw error to outside
      })
      .on('finish', () => {
        resolve(); // done
      });
  })
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69798101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档