【Javascript】分享一个异步请求问题导致的bug以及解决方法(Array.map Array.foreach 中 async/await 写法无效)...

codeburst.io/javascript-…

Array.foreach、 Array.map 中的async/await写法 会失效 ,可使用Promise+Array.map 或者P romise + for循环代替

if(res.code === 10000){
    res.data = res.data.map((item)=>{
        return Object.assign({},item,{
            is_end:Date.now() > item.end_time || item.status === 2?true:false
        })
    })
    
    // map不可用
    // res.data.map(async(item,index)=>{                    
    //     const obj = await this.getActivityDetail(item.activity_key)   //异步
    //     return Object.assign({},item,obj)
    // })
    

    // foreach不可用
    // res.data.forEach(async(item,index)=>{
    //     const obj = await this.getActivityDetail(item.activity_key)   //异步
    //     item = Object.assign({},item,obj)
    // })


    //-------------------------------------------------------------
    // Primise + map 可用
    // const data =  await Promise.all( res.data.map(async(item,index)=>{
    //         const obj = await this.getActivityDetail(item.activity_key)   //异步
    //         return Object.assign({},item,obj)
    //     })
    // )
    //--------------------------------------------------------------
    // Promise + for 可用
    const data = await new Promise((resolve)=>{
        for(var index in res.data){
            (async function(index,item,self){
                const result = await self.getActivityDetail(item.activity_key)  //异步
                res.data[index] = Object.assign({},item,result)
                if(parseInt(index) === res.data.length-1)
                {
                    resolve(res.data)
                }
                // console.log('---',self.activityList)
            })(index,res.data[index],this)
        }
    })
    console.log('end',data)
    this.activityList = data
    
}
复制代码

如果觉得我的文章对你有帮助,欢迎关注我的blog

相关知识点

【Javascript】深入理解async/await的实现,Generator+Promise = Async/Await
【Javascript】深入理解this作用域问题以及new运算符对this作用域的影响
【Javascript】手写运算符new创建实例并实现js继承

转载于:https://juejin.im/post/5cb6927e6fb9a068aa4b9598

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值