es6中一个function内的循环,循环里有异步,怎么让最终的结果被return

问题描述
es6中一个function内的循环,循环里有异步,怎么让最终的结果被return,在循环外return不是想要的结果
问题出现的环境背景及自己尝试过哪些方法
用vue2开发的web项目,Promise和async/await都有个问题就是循环内得到的是promise对象,无法在循环外return想要的结果
相关代码
//请把代码文本粘贴到下方(请勿用图片代替代码)async_normalizeSongs(list){
if(!list){
return
}
letrest=[]
letindex=1
console.log(list)
for(leti=0;iif(list[i].songid&&list[i].albummid){
letres=awaitgetSongVkey(list[i].songmid)
if(res.code===ERR_OK){
constfilename=res.req_0.data.midurlinfo[0].filename
constvkey=res.req_0.data.midurlinfo[0].vkey
constnewSong=createSong(list[i],filename,vkey)
//console.log(newSong)
rest.push(newSong)
}
}
index++
}
returnrest
}
_genResult(data){
letrest=[]
if(data.zhida&&data.zhida.singername){
rest.push({...data.zhida,...{type:TYPE_SINGER}})
}
if(data.song){
letpromise=this._normalizeSongs(data.song.list)
promise.then((res)=>{
console.log(res)
/*rest=rest.concat(res)
this.result=rest*/
rest=rest.concat(this._normalizeSongs(data.song.list))
})
}
console.log(rest)
returnrest
}
你期待的结果是什么?实际看到的错误信息又是什么?
_genResult这个函数里promise里的res怎么return出这个函数,路过的道友们给看看,万分感谢
慕村9548890
浏览 1345回答 2
2回答

慕沐林林

Promise.all()了解一下。constresults=Promise.all(list.map(item=>getSongVkey(item.songmid)))//results是一个数组注:你的getSongVkey方法应该返回的是一个Promise对象.参考如下:MDNletp1=newPromise((resolve,reject)=>{resolve('成功了')})letp2=newPromise((resolve,reject)=>{resolve('success')})Promise.all([p1,p2]).then(results=>{console.log(results)}).catch(error=>{console.log(error)})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript