【问题标题】:data returned by YouTube API seems immutable?YouTube API 返回的数据似乎是不可变的?
【发布时间】:2018-11-22 17:38:01
【问题描述】:

 onSearch = async () => {
    const query = qs.stringify({ ...API_QUERY_PARAMS, q: this.state.searchString });
    const url = `https://www.googleapis.com/youtube/v3/search?${query}`
    
    const { data } = await axios.get(url);
    
    data.items.forEach(async vid => {
      let id = vid.id.videoId; //Individual video ID
      const individualQuery = qs.stringify({ ...INDIVIDUAL_API_QUERY_PARAMS, id  });
      const individualURL = `https://www.googleapis.com/youtube/v3/videos?${individualQuery}`;
      
      const { data } = await axios.get(individualURL);
      //data.items[0].statistics does give me the object that I want
      vid['statistics'] = data.items[0].statistics
    })
    
    this.setState({ videos: data.items });
    console.log(this.state.videos);
  }

基本上上面的onSearch 方法会调用YouTube API 并向我返回一个视频列表,在data.items

对于每一个video/item,它们都缺少statistics,所以我再次调用来检索数据,数据成功返回为data.items[0].statistics,然后我想附加到单个项目中一个财产。

没有抛出异常,但是我也没有看到新创建的 statistics 属性。这个想法就像下面的一个非常简单的形式。

let items = [
  {id: '123', title: 'John'},
  {id: '123', title:'sammy'}
]

items.forEach(x=> {
	x['statistics'] = { propA: 'A', propB: 'B'};
})

console.log(items);

【问题讨论】:

    标签: javascript react-native youtube-api axios


    【解决方案1】:

    async 函数放在forEach 中不会暂停外线程,直到所有迭代都完成 - 您需要Promise.allmap 每次异步迭代到Promise 并等待每个@ 987654326@ 在继续之前解决:

    const query = qs.stringify({ ...API_QUERY_PARAMS, q: this.state.searchString });
    const url = `https://www.googleapis.com/youtube/v3/search?${query}`
    
    const { data } = await axios.get(url);
    
    await Promise.all(data.items.map(async (vid) => {
      let id = vid.id.videoId; //Individual video ID
      const individualQuery = qs.stringify({ ...INDIVIDUAL_API_QUERY_PARAMS, id  });
      const individualURL = `https://www.googleapis.com/youtube/v3/videos?${individualQuery}`;
      const { data } = await axios.get(individualURL);
      vid.statistics = data.items[0].statistics
    }))
    
    this.setState({ videos: data.items });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-19
      • 2023-01-12
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-19
      • 1970-01-01
      相关资源
      最近更新 更多