最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 循环内等待异步结果(业务中常见)

    正文概述 掘金(陶醉的松鼠)   2021-02-03   448

    循环内等待异步结果(业务中常见)

    循环内等待异步结果

    前言

    当我们在开发业务需求时候,经常有一种情况,用户批量上传一组图片,我们需要对这组图片,单独进行校验,并作出上传操作。

    循环内等待异步结果(业务中常见)

    就比如这组校验,你会发现他是异步执行的。

    当有一组数据需要循环完成以上校验,只要有一张不合格,直接打回,并作出提示,比如这样

    this._.forEach(files,(item, index) => {
        //你的校验规则
    
        //拿到校验结果后的操作
    
        //结束循环
      })
    

    你会发现,解决这个业务需求,需要循环等待

    比如这样,把如下代码复制到浏览器控制台

    循环内等待异步结果(业务中常见)

    async function dome() {
        console.log('我着急')
        await delay(3000)
        console.log('我也是')
        function delay(num) {
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    console.log('你等我一秒')
                    resolve()
                }, num)
            })
        };
        for (let index = 0; index < 100; index++) {
            console.log(index)
            await delay(1000)
    
        }
    }
    

    循环内等待异步结果(业务中常见)

    你发现了什么?

    循环变慢了,那么我们是否可以改造成这样

    循环内等待异步结果(业务中常见)

    for(let index=0;files.length;index++){
         async function a(){
            try {
            let check=await imgarr(files[index])
            } catch(e) {
              //在这里处理错误回调
               console.log(e);
            }
            //拿到返回值check后处理你的逻辑
             //xxxxxxx
            //xxxxxxx
            //结束当前循环
          }
            a()
        }
        function imgarr(item) {
          return new Promise((resolve, reject) => {
            const myimg = URL.createObjectURL(item)
            const img = new Image()
            img.src = myimg
            img.onload = function() {
              if (!['jpg', 'jpeg', 'png'].includes(item.type.split('/')[1])) {
                reject('图片格式需要为jpg/jpeg/png格式')
              } else if (item.size / 1024 / 1024 > 3) {
                reject('图片大小需要小于3M')
              } else if (img.width / img.height !== 1) {
                reject('图片需要为长宽相等的绝对正方形')
              } else if ((img.width < 500 || img.width > 5000) || (img.height < 500 || img.height > 5000)) {
                reject('图片尺寸(最小500*500,最大5000*5000)')
              } else {
                resolve(item)
              }
            }
          })
        }
    
    

    实现确认功能

    业务问题解决,能否用在其业务中,使用循环等待操作?

    那么为什么我不用forEach,forin,map来做循环等待,这是为什么?

    欢迎在评论区回复


    起源地下载网 » 循环内等待异步结果(业务中常见)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元