博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Promise加载图片用法详解
阅读量:6371 次
发布时间:2019-06-23

本文共 2698 字,大约阅读时间需要 8 分钟。

现在不会用Promise都不好意思说自己是前端,Promise为什么火起来,一句话解决了回调嵌套和执行顺序问题最重要的我感觉是解决顺序问题。

不过开始写之前我们先看看,promise怎么解决问题,怎么用。

列举一个顺序加载图片demo:

//需求 加载三张图片 img1,img2,img3,加载顺序是1,2,3        let url1 = "https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=3293635140,3955114282&fm=26&gp=0.jpg"        let url2 = "https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1019333328,1858047370&fm=26&gp=0.jpg"        let url3 = "https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=4226468334,723383513&fm=26&gp=0.jpg"        let oImg1 = new Image()        oImg1.onload = function() {            console.log('img1加载完毕')            let oImg2 = new Image()            oImg2.onload = function() {                console.log('img2加载完毕')                let oImg3 = new Image()                oImg3.onload = function() {                    console.log('img3加载完毕')                    console.log('全部加载完毕')                }                oImg3.src = url3            }            oImg2.src = url2        }        oImg1.src = url1

//结果没毛病

image.png

接下来我们试试promise怎么做,

function loadImg(url) {            let img = new Image()            img.src = url            return new Promise((resolve, reject) => {                img.onload = () => {                    console.log(url)                    resolve()                }                img.onerror = (e) => {                    reject(e)                }            })        }        loadImg(url1).then(() => {            return loadImg(url2)        }).then(() => {            return loadImg(url3)        })

image.png

接下来再看看Promise.all,

//需求 加载三张图片 img1,img2 全部加载完成做一些事情        let urls = ["https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=3293635140,3955114282&fm=26&gp=0.jpg",            "https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1019333328,1858047370&fm=26&gp=0.jpg"        ]        function loadImg(url) {            let img = new Image()            img.src = url            return new Promise((resolve, reject) => {                img.onload = () => {                    resolve(img)                }                img.onerror = (e) => {                    reject(e)                }            })        }        function loadAll(arr) {            let result = []            arr.forEach(item => {                let p = loadImg(item).then((img) => {                        console.log(img)                    })                    //存储当前Promise对象                console.log(p)                result.push(p)            });            Promise.all(result).then(() => {                //全部完成                console.log("done")            }).catch((err) => {                // 有失败的情况                console.log(err)            });        }        loadAll(urls)

image.png

完成。。。

转载地址:http://pnyqa.baihongyu.com/

你可能感兴趣的文章
Python fabric实现远程操作和部署
查看>>
详解Java中staitc关键字
查看>>
前中情局局长:FBI目的是从根本上改善iPhone
查看>>
大隐隐于市,你身边的那些安全隐患你都知道么?
查看>>
物联网市场迅猛发展 “中国芯”如何把握机会?
查看>>
aws 上使用elb 的多域名问题
查看>>
环球花木网的目标就是致力于打造成为“园林相关行业的专业性门户网站
查看>>
《编写高质量代码:改善c程序代码的125个建议》—— 建议14-1:尽量避免对未知的有符号数执行位操作...
查看>>
《C语言编程魔法书:基于C11标准》——2.2 整数在计算机中的表示
查看>>
全球程序员编程水平排行榜TOP50,中国排名第一
查看>>
HDFS 进化,Hadoop 即将拥抱对象存储?
查看>>
Edge 浏览器奇葩 bug:“123456”打印成“114447”
查看>>
Sirius —— 开源版的 Siri ,由 Google 支持
查看>>
《OpenGL ES应用开发实践指南:Android卷》—— 2.7 小结
查看>>
《Windows Server 2012活动目录管理实践》——第 2 章 部署第一台域控制器2.1 案例任务...
查看>>
Java Date Time 教程-时间测量
查看>>
Selector.wakeup实现注记
查看>>
《Java EE 7精粹》—— 第1章 Java EE 1.1 简介
查看>>
《Exchange Server 2013 SP1管理实践》——导读
查看>>
syslog:类Unix系统常用的log服务
查看>>