话不多少,直接上代码
一: 提前定义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