等待可读流 ES8 TypeScript 的完成,fs
Await the Completion of a Readable Stream ES8 TypeScript, fs
我的代码无法运行,因为文件在下一行执行之前尚未解压缩。
这是我的解压功能:
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;
});
}
我将如何重构它以使其正常异步工作?或者非异步,如果它会在完成之前等待。有类似的问题但是对我不起作用,可能是因为这个函数returns void,不是流出来的数据
src.pipe
不是 return 一个 Promise 然后你不能等待它。让我们将其转换为 Promise:
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
});
})
}
我的代码无法运行,因为文件在下一行执行之前尚未解压缩。 这是我的解压功能:
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;
});
}
我将如何重构它以使其正常异步工作?或者非异步,如果它会在完成之前等待。有类似的问题但是对我不起作用,可能是因为这个函数returns void,不是流出来的数据
src.pipe
不是 return 一个 Promise 然后你不能等待它。让我们将其转换为 Promise:
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
});
})
}