代码报错会走向失败时的回调
1 let p = new Promise((resolve, reject) => { 2 throw new Error("我错了"); //会失败 3 }) 4 5 p.then((data) => { 6 console.log(data) 7 }, (err) => { 8 console.log(err) // 执行这个方法 9 })
执行reject会走向失败时的回调
let p = new Promise((resolve, reject) => { reject("我错了") //会失败 }) p.then((data) => { console.log(data) }, (err) => { console.log(err) // 执行这个方法 })
执行resolve会执行成功时的回调
let p = new Promise((resolve, reject) => { resolve("我对了") // 会成功 }) p.then((data) => { console.log(data) // 执行此方法 }, (err) => { console.log(err) })
不执行的情况
let p = new Promise((resolve, reject) => { console.log("不知道"); }) p.then((data) => { console.log(data) // 不执行 }, (err) => { console.log(err) // 不执行 })
链式调用可以返回普通值
let p = new Promise((resolve, reject) => { resolve("执行1") }) p.then((data) => { return "执行2" }).then((data) => { return "执行3" }).then((data) => { console.log(data) //执行3 })
链式调用可以返回promise
let p = new Promise((resolve, reject) => { resolve("执行1") }) p.then((data) => { return new Promise((resolve, rejext) => {resolve("执行2")}) }).then((data) => { return new Promise((resolve, rejext) => {resolve("执行3")}) }).then((data) => { console.log(data) //执行3 })
链式调用也可以不返回任何值直接到达下一步
let p = new Promise((resolve, reject) => { resolve("执行1") }) p.then((data) => { // 跳过我吧! }).then((data) => { return new Promise((resolve, rejext) => {resolve("执行3")}) }).then((data) => { console.log(data) //执行3 })
手写一个promise:https://github.com/wuxianqiang/promise