等待每个结果

时间:2019-03-05 16:58:56

标签: typescript visual-studio-code fs

我正试图删除在Visual Studio Code扩展中的dispose函数期间创建的一堆临时文件。出于某种原因,即使我前面有forEach,在执行该工作之前,仍会返回启动大量异步工作的await。我对forEachawait的理解还是在单个dispose函数中正在完成的工作是否有问题?

public async dispose(): Promise<any> {

    return new Promise(async (err) => {
        await this.disposables.forEach(async disposable => {
            await disposable.dispose();
        });
        this.disposables.clear();
        let rmdir = promisify(fs.rmdir);
        let tempDir = this.getTempDir();
        try {
            await rmdir(tempDir);
        } catch (err) {
            try {
                this.outChannel.appendLine(`Error deleting ${tempDir}: ${err}.`);
            } catch (err2) { }
        }
    });
}

一次性用品的内容是使用以下代码创建的:

        this.disposables.set(relativePath, {dispose: async () => {
            let unlink = promisify(fs.unlink);
            let rmdir = promisify(fs.rmdir);
            let readdir = promisify(fs.readdir);
            try {
                try {
                    this.outChannel.appendLine(`Cleaning up ${tempFullPath}...`);
                } catch(err2) { }
                await unlink(tempFullPath);
                relativePath = path.dirname(relativePath);
                while (/[^\\\.]+/.test(relativePath)) {
                    let parent = path.join(tempDir,relativePath);
                    if ((await readdir(parent)).length === 0) {
                        await rmdir(parent);
                    }
                    relativePath = path.dirname(relativePath);
                }
            } catch (err) {
                try {
                    this.outChannel.appendLine(`Failed - ${err}.`);
                } catch(err3) { }
            }
            return;
        }});

结果是最高处置中的最后一个rmdir失败,因为即使在我查看时该目录也不为空。

0 个答案:

没有答案