码迷,mamicode.com
首页 > 其他好文 > 详细

使用Promise解决回调地狱问题

时间:2021-02-26 13:31:15      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:asc   同步   因此   idt   let   使用   album   reject   err   

 let urlBig = "http://static.699pic.com/best_album/57_banner_____.jpg!/fh/410"
        let urlMid = "http://static.699pic.com/best_album/57.jpg"
        let urlSmall = "http://static.699pic.com/best_album/57.jpg!/fw/316"

        //Big=>Mid=>Small
        function loadImage(url) {
            return new Promise(function (resolve, reject) {
                //执行图片加载
                let image = new Image()
                image.src = url

                image.onload = function () {
                    console.log("图片加载成功")
                    resolve({ width: image.width, height: image.height })
                }

                image.onerror = function (event) {
                    console.log("图片加载失败")
                    reject(event)
                }
            })
        }
        //异步操作一
        // loadImage(urlBig).then(function (data) {
        //     console.log("urlBig图片加载完成后=>执行处理")
        //     console.log("返回的数据:", data)
        // })
        // //异步操作二
        // loadImage(urlMid).then(function (data) {
        //     console.log("urlMid图片加载完成后=>执行处理")
        //     console.log("返回的数据:", data)
        // })
        // //异步操作三
        // loadImage(urlSmall).then(function (data) {
        //     console.log("urlSmall图片加载完成后=>执行处理")
        //     console.log("返回的数据:", data)
        // })

        //回调函数嵌套
        // loadImage(urlBig).then(function (data) {
        //     console.log("urlBig图片加载完成后=>执行处理")
        //     console.log("返回的数据:", data)

        //     loadImage(urlMid).then(function (data) {
        //         console.log("urlMid图片加载完成后=>执行处理")
        //         console.log("返回的数据:", data)

        //         loadImage(urlSmall).then(function (data) {
        //             console.log("urlSmall图片加载完成后=>执行处理")
        //             console.log("返回的数据:", data)
        //         })
        //     })
        // })

        //Promise对象 可以将异步操作以同步操作的流程表达出来,避免多层回调函数的嵌套
        //then() 方法返回一个新得Promise对象,因此可以采用链式写法来解决回调地狱问题

        loadImage(urlBig)
            .then(function (data) {
                console.log("urlBig图片加载完成后=>执行处理")
                console.log("返回的数据:", data)
                //返回一个新得Promise对象
                return loadImage(urlMid)
            })
            .then(function (data) {
                console.log("urlMid图片加载完成后=>执行处理")
                console.log("返回的数据:", data)
                //返回一个新得Promise对象
                return loadImage(urlSmall)
            })
            .then(function (data) {
                console.log("urlSmall图片加载完成后=>执行处理")
                console.log("返回的数据:", data)
            }).catch(function (error) {
                console.log("error", error)
            })

使用Promise解决回调地狱问题

标签:asc   同步   因此   idt   let   使用   album   reject   err   

原文地址:https://www.cnblogs.com/lceihen/p/14450888.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!