美文网首页
Javascript Promise用法(1)

Javascript Promise用法(1)

作者: 我是一个前端 | 来源:发表于2019-01-17 19:30 被阅读0次

现在不会用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

完成。。。

相关文章

  • Javascript Promise用法(1)

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

  • 理解Promise in JavaScript

    Promise是JavaScript中的一个核心概念,初学JavaScript,对Promise的概念和用法都比较...

  • promise详解

    Promise 用法api 1.基本用法 2.简便写法 Promise.all([]) Promise.race...

  • Promise 对象

    一、Promise的含义 Promise在JavaScript语言中早有实现,ES6将其写进了语言标准,统一了用法...

  • JavaScript Promise的用法

    Promise是JavaScript ES6中的一个新特性,用于异步处理。在没有Promise之前,做异步调用通常...

  • [JavaScript] Promise用法总结

    (1)new Promise(function(resolve,reject){})返回了一个Promise对象 ...

  • Promise学习笔记

    什么是Promise? 1、抽象表达:是JavaScript中进行异步编程的新的解决方案(旧的指的是纯回调式的用法...

  • ES6-Promise

    参考链接: 1.阮一峰Promise解读 2.Promise用法讲解 Promise含义 Promise是异步编程...

  • 阿里电话面试

    1、请你说明this的用法2、请说明Promise的用法3、

  • 自身es6易忘点

    1、promise 用法 functiontest(resolve, reject){ if(true){reso...

网友评论

      本文标题:Javascript Promise用法(1)

      本文链接:https://www.haomeiwen.com/subject/ewsvkqtx.html