Thursday, May 23, 2024
 Popular · Latest · Hot · Upcoming
66
rated 0 times [  73] [ 7]  / answers: 1 / hits: 17900  / 6 Years ago, mon, april 23, 2018, 12:00:00

So basically i created a loop that takes values from an array and puts those values in a a loop using the youtube api . The youtube link works fine if I access it from within the loop, but outside the loop '(when i run the console.log({urllist})', i get an empty array.What I want to do is push all the values into the urllist empty array then transfer for them to the state variable('videos')



The function I am referring to is the videoUrls





class MusicCharter extends React.Component{
constructor(){
super();
this.state= {
data:[],
videos:[],
}
}

componentDidMount(){
XHR.onreadystatechange = function(){
if(XHR.readyState === 4 && XHR.status === 200) {
var url = XHR.responseText;
this.setState({data:(JSON.parse(url).tracks.track)})
}
}.bind(this)

XHR.open(GET,http://ws.audioscrobbler.com/2.0/?method=chart.gettoptracks&api_key=xxxxxxx&format=json);
XHR.send();
}

videoUrls=()=>{
let i=0;
let urllist=[]
for(i;i< this.state.data.length;i++){
fetch(`https://www.googleapis.com/youtube/v3/search?part=snippet&q=${this.state.data[i].name}&key=xxxxxxxxxxx0`)
.then(response=> {
return response.json()
})
.then(data=>{
return(urllist.push(data.items[0]))})
}
console.log({urllist})
}




More From » reactjs

 Answers
11

Your for loop does not iterate asynchronously but you can get around this by putting your for loop inside an async function Asynchronous Process inside a javascript for loop and awaiting the result of the asynchronous operations



videoUrls = async () => {
let i=0;
let urllist=[]
for(i;i< this.state.data.length;i++){
const response = await fetch(`https://www.googleapis.com/youtube/v3/search?part=snippet&q=${this.state.data[i].name}&key=xxxxxxxxxxx0`)
const json = await response.json()
urllist.push(json.items[0])
console.log({urllist})
}
}


This prevents the for loop from incrementing until both the fetch and conversion of the response to json is complete


[#54587] Thursday, April 19, 2018, 6 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
magdalena

Total Points: 364
Total Questions: 101
Total Answers: 92

Location: Namibia
Member since Mon, Nov 14, 2022
2 Years ago
magdalena questions
Thu, May 12, 22, 00:00, 2 Years ago
Fri, Jun 18, 21, 00:00, 3 Years ago
Fri, Mar 26, 21, 00:00, 3 Years ago
Thu, Oct 29, 20, 00:00, 4 Years ago
;