话不多少,直接上代码
一: 提前定义Promise,使用 .then调用(有缺陷,,不建议)
        var a1, b2, c3
        // Promise
        var p1 = new Promise((resolve, reject) => {
            setTimeout(() => {
                a1 = 12
                resolve(‘第yi个promise‘)
            }, 5000)
        })
        var p2 = new Promise((resolve, reject) => {
            setTimeout(() => {
                b2 = 12
                resolve(‘第er个promise‘)
            }, 3000)
        })
        var p3 = new Promise((resolve, reject) => {
            setTimeout(() => {
                c3 = 12
                resolve(‘第san个promise‘)
            }, 4000)
        })
        p1.then( res => {
            console.log(res)
            console.log(a1 + b2 + c3);
            return p2
        }).then( res => {
            console.log(res)
            console.log(a1 + b2 + c3);
            return p3
        }).then( res =>{
            console.log(res);
            console.log(a1 + b2 + c3);
        })
输出台打印如下

特点:同时打印出来,解决回调地狱是有缺陷的,如果第一个时间长和第一个时间短的效果是不一样的。所以最好不要写这种。
第二种、返回Promise对象,不提前定义(推荐),按照先后顺序执行,第一个没有执行完第二个不会执行。
        var a1, b2, c3
        // Promise
        var p1 = new Promise((resolve, reject) => {
            setTimeout(() => {
                a1 = 12
                resolve(‘第yi个promise‘)
            }, 6000)
        })
p1.then(res => {
            console.log(a1 + b2 + c3)
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    b2 = 13
                    console.log(a1 + b2 + c3);
                    resolve(‘第二个promise‘)
                }, 1000)
            })
        }).then(res2 => {
            console.log(res2)
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    c3 = 10
                    console.log(a1 + b2 + c3);
                    resolve(‘第三个promise‘)
                }, 2000)
            })
        }).then(res3 => {
            console.log(res3)
        })
浏览器输出如下

第三种方法、将Promise对象封装成函数,进行调用。(墙裂推荐)
        function test1() {
            return new Promise( (resolve,reject) => {
                setTimeout( () => {
                    console.log(‘test1执行并赋值‘)
                    resolve(111)
                },2000)
            })
        }
        function test2() {
            return new Promise( (resolve,reject) => {
                setTimeout( () => {
                    console.log(‘test2 5秒后执行并赋值‘)
                    resolve(222)
                },5000)
            })
        }
        function test3() {
            return new Promise( (resolve,reject) => {
                setTimeout( () => {
                    console.log(‘test3 3秒后执行并赋值‘)
                    resolve(333)
                },3000)
            })
        }
        test1().then( res =>{
            console.log(res);
            return test2()
        }).then( res => {
            console.log(res);
            return test3()
        }).then( res =>{
            console.log(res);
        })
浏览器输出如下:

原文:https://www.cnblogs.com/tdcqcrtd/p/14680072.html