gpt4 book ai didi

javascript - 在reactjs中循环获取

转载 作者:行者123 更新时间:2023-11-28 17:32:28 25 4
gpt4 key购买 nike

所以基本上我创建了一个循环,它从数组中获取值并使用 youtube api 将这些值放入循环中。如果我从循环内访问它,youtube 链接工作正常,但在循环外“(当我运行 console.log({urllist})”时,我得到一个空数组。我想做的是推送所有值进入 urllist 空数组,然后将它们传输到状态变量('videos')

我指的函数是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})
}

最佳答案

您的 for 循环不会异步迭代,但您可以通过将 for 循环放入 async 函数中来解决此问题 Asynchronous Process inside a javascript for loop等待异步操作的结果

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})
}
}

这可以防止 for 循环递增,直到 json 响应的获取和转换完成

关于javascript - 在reactjs中循环获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49989984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com