异步/等待无法在地图功能内正常工作

时间:2018-11-22 19:20:37

标签: javascript typescript asynchronous promise async-await

我正在尝试在map函数中执行多个get请求,但是我收到了'捕获到未处理的诺言拒绝,它带有“ TypeError:无法读取未定义的属性'trackItems'” ”。

波纹管功能基本上是接收响应作为参数,并建立一个对象以保存其内容。最后,我得到的对象具有预期的id,名称和类型,但是 trackItems数组始终为空。我确信我从getPlaylistTracks函数中获得的信息是正确的,并且无法理解为什么它无法正常工作。

此外,我在getPlaylistTracks上使用 requestPromiseNative 进行请求并使用了await,而我的homeContentItems全局变量具有以下类型的结构:

私有静态 homeContentItems :任意= {项目:[{内容:{项目:[]}}]]};

这是saveContent函数:

   private saveContent(homeItemsResponse: any): any {
        try {
          if (homeItemsResponse && homeItemsResponse !== undefined) {
            homeItemsResponse.map((playlistCategoriesItem: any, i: number) => {
              const homeContent: any = Home.homeContentItems.items[0].content.items;

              homeContent.push({ name: playlistCategoriesItem.name, content: { items: [] } });

              const playlistContent: any = playlistCategoriesItem.content.items;

              playlistContent.map(async (playlistItem: any) => {
                const homePlaylistItems: any = Home.homeContentItems.items[0].content.items[i].content.items;

                homePlaylistItems.push({
                  id: playlistItem.id,
                  name: playlistItem.name,
                  type: playlistItem.type,
                  trackItems: [],
                });

                const playlistId: string = playlistItem.id;
                const response: any = await this.getPlaylistTracks(playlistId);

                response.items.map(async (item: any) => {
                  homePlaylistItems.trackItems.push(item);
                });
              });
            });
          }
        } catch (error) {
          this.logger.info(`@@@@ Home - Error on saveHomeContent: ${error}`);
        }
      }

预先感谢您:)

1 个答案:

答案 0 :(得分:0)

改为使用for循环。这样SelectListItem将按预期工作。

也不要忘记将public List<SelectListItem> Ratings { get; set; } 函数设为await

saveContent