代码报错会走向失败时的回调

 let p = new Promise((resolve, reject) => {
throw new Error("我错了"); //会失败
}) p.then((data) => {
console.log(data)
}, (err) => {
console.log(err) // 执行这个方法
})

执行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

04-09 13:46
查看更多