解析TS中的Zip文件。尽管等待,返回的结果显示为空,而函数内的结果不是

编程入门 行业动态 更新时间:2024-10-05 23:18:18

解析TS中的Zip文件。尽管等待,返回的结果显示<a href=https://www.elefans.com/category/jswz/34/1771092.html style=为空,而函数内的结果不是"/>

解析TS中的Zip文件。尽管等待,返回的结果显示为空,而函数内的结果不是

我正在编写一些代码来解析存储在Zip文件夹中的所有CSV文件。我为此使用JSZip。我遍历dataset的所有文件,并将每个文件转换为entry。我将结果串联在名为entries的数组中。

这是entries数组在以下情况下发生的事情:

  1. 我从循环内将其记录到控制台-正确打印文件。
  2. 我从循环外部的同一函数将其记录到控制台,而没有setTimeout-打印空数组
  3. 我使用setTimeout在循环外从同一功能将其记录到控制台-正确打印文件。

现在我从此函数返回entries,我尝试从以下位置返回它:

  1. setTimeout-返回未定义

  2. setTimeout右边-返回空数组

这里是代码:

private async parseAllFiles (dataset: JSZip, id: string): Promise<string[]> {
    let entries: string[] = [];

    await dataset.forEach(  async (fileName) => {
        const fileContent = await dataset.file(fileName).async("text");  // async func provided by JSZip
        const parsedEntries = await this.parseCsv(fileContent, courseCode); // another async function
    });
    console.log('Entries are: \n');
    console.log(entries);                  // Prints empty array

    setTimeout( () => {
        console.log("Entries are: ");
        console.log(entries);          // prints perfectly
        return Promise.resolve(entries); // returns undefined
    }, 1500);
    // return Promise.resolve(entries);   // returns empty array
}

我很确定entries返回得太早了,但是如何解决这个问题,最好不要使用手动setTimeout吗?

回答如下:

forEach是一个无效的返回函数,因此无法等待。

您可以做的是创建一个承诺数组:

const promises: Promise[] = [];

然后添加到forEach中的数组:

dataset.forEach(fileName => {
    promises.push(async () => {
        const fileContent = await dataset.file(fileName).async("text");
        const parsedEntries = await this.parseCsv(fileContent, courseCode);
        return parsedEntries;
    });
});

然后等待他们全部完成:

const entries: string[] = (await Promise.all(promises)).flat();

[Promise.all返回一个新的Promise,它解析为提供的Promise结果的数组。

这些可以使用Array.flat()展平为单个数组。

更多推荐

解析TS中的Zip文件。尽管等待,返回的结果显示为空,而函数内的结果不是

本文发布于:2024-05-07 21:35:25,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1757351.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:为空   函数   文件   TS   Zip

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!