将数据从一个数组复制到另一个数组会导致结果数组仅包含输入数组中最后一项的重复条目

莫林

我正在尝试编写一个异步函数,该函数从 Music 类型的数组中创建一个 MusicWithMetadata 类型的新数组。我已经用输入数组中的 6 个条目对其进行了测试。出于某种原因,结果数组仅包含输入数组最后一项的 6 个条目。

private async getMusicWithMetadata(music: Music): Promise<MusicWithMetadata> {
    const metadata = await musicMedatada.parseFile(music.src);
    const musicWithMetadata = NullMusicWithMetadata;
    musicWithMetadata.id = music.id;
    musicWithMetadata.src = music.src;
    musicWithMetadata.src_type = music.src_type;
    musicWithMetadata.title =
      metadata.common.title !== undefined
        ? metadata.common.title
        : this.getFileNameWithoutExtension(music.src);
    musicWithMetadata.artists = metadata.common.artists;
    musicWithMetadata.album = metadata.common.album;
    musicWithMetadata.albumArt =
      metadata.common.picture !== undefined
        ? `data:${
            metadata.common.picture[0].format
          };base64,${metadata.common.picture[0].data.toString('base64')}`
        : metadata.common.picture;
    return musicWithMetadata;
  }

 private async getMusicArrayWithMetadata(musicList: Array<Music>) {
    const test1 = musicList.map(async (music) => {
      const musicWithMetadata = await this.getMusicWithMetadata(music);
      return Promise.resolve().then(() => {
        console.log(musicWithMetadata);
        return musicWithMetadata;
      });
    });

    await Promise.all(test1).then((music) => {
      console.log(music);
    });
  }

我在这里调用方法。

 public async queueAll() {
    const musicList = await this.musicRepository.getAll();
    MusicManager.queue = await this.getMusicArrayWithMetadata(musicList);
    MusicManager.currentlyPlayingPosition = 0;
  }

输入:在此处输入图片说明实际输出:在此处输入图片说明期望输出:结果数组应包含输入数组中的所有 6 个项目。

威尔逊佩纳

您需要Promise.all在地图上使用,因为它返回一个承诺数组,您还需要返回结果数组:

private async getMusicWithMetadata(music: Music): Promise<MusicWithMetadata> {
    const metadata = await musicMedatada.parseFile(music.src);
    return {
      ...music,
      title: metadata.common.title !== undefined
        ? metadata.common.title
        : this.getFileNameWithoutExtension(music.src),
      artists: metadata.common.artists,
      album: metadata.common.album,
      albumArt: metadata.common.picture !== undefined
        ? `data:${
            metadata.common.picture[0].format
          };base64,${metadata.common.picture[0].data.toString('base64')}`
        : metadata.common.picture,
    };
  }

  private async getMusicArrayWithMetadata(musicList: Array<Music>) {
    const test1 = await Promise.all(musicList.map(async (music) => {
      const musicWithMetadata = await getMusicWithMetadata(music);
      console.log(musicWithMetadata);
      return musicWithMetadata;
    }));
    return test1;
  }

我重构了getMusicWithMetadata但你真正需要的是getMusicArrayWithMetadata函数的变化

更新

您还应该将返回类型: Promise<MusicWithMetadata[]>放在最后一个方法上:

private async getMusicArrayWithMetadata(musicList: Array<Music>): Promise<MusicWithMetadata[]>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将值和键从一个数组复制到另一个数组

我正在尝试将一个数组的数据复制到另一个数组

汇编-内联汇编-从一个数组复制到另一个数组?

根据组名将信息从一个数组复制到另一个数组

将一个数组的一些索引复制到另一个数组

将x随机值从一个数组复制到另一个PHP

使用while循环将一个数组复制到另一个数组

如何将一个数组的元素复制到另一个数组

将一个数组的内容复制到另一个数组

使用指针将一个数组的元素复制到另一个数组的函数

将一个数组的元素复制到另一个数组中

将一个数组复制到另一个数组,同时对其进行排序

如何将数组值复制到另一个数组

如何使用某种逻辑将数组复制到另一个数组

将数组项目复制到另一个数组中

将临时字符数组从 for 循环复制到另一个数组

是否有将PHP数组复制到另一个数组的功能?

将子数组复制到另一个数组,同时更改它们?

将数组字段更快地复制到另一个数组中

使用PySpark数据帧时,根据索引从一个数组中定位值,然后复制到另一个数组中

将元素从一个数组复制到另一个数组时遇到Javascript问题。额外的方括号,额外的尺寸?

如何将元素从一个数组复制到JavaScript中的另一个数组?

Jolt - 将值从一个数组复制到另一个数组并更改键

将未排序的C数组复制到另一个数组中,同时避免重复

在 React js 中,如何仅将选定的对象从数组复制到另一个数组?

将一个二维数组的坐标复制到另一个数组

当我将一个数组复制到另一个数组时,为什么两个数组都被修改?

Numpy 将非零元素从一个数组复制到另一个(3D 数组)

在汇编中将一个数组的内容复制到另一个数组