forEach()内使用异步函数,此函数需要item的其中一个属性(mid)作为jsonp参数来异步获取数据,应该怎么做?

RT,list包含100首歌曲,现在对它进行遍历,拿到每首歌曲的mid,作为getSongvkey(jsonp)参数来异步获取vkey值,再通过creatSong方法将vkey作为属性添加至歌曲上,这个vkey值需要用来获取歌曲的播放链接。
现在的问题是因为数据是异步获取的,我按以下代码在forEach遍历的时候,只能拿到最后一个item的vkey,如何每遍历一个item就获取它的mid然后异步获取其vkey返回,再处理下一个item?
_normalizeSongs(list){
letret=[]
list.forEach((item)=>{
let{musicData}=item
if(musicData.songid&&musicData.songmid&&musicData.albummid){
getSongvkey(musicData.songmid).then(res=>{
if(res.code===ERR_OK){
letvkey=res.data.items[0].vkey
ret.push(creatSong(musicData,vkey))
}
})
}
}
returnret
}
慕码人2483693
浏览 689回答 2
2回答

长风秋雁

async/await了解一下,这个写法看起来挺像同步的。遇到异步的地方会堵塞,一直到异步方法执行完成才会继续往下执行,达到类似同步执行的效果。用法很简单,百度几个例子看一下就明白了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript