代碼報錯會走向失敗時的回調
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