// promise的链式调用
const p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('ok')
}, 100)
})
const step1 = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('step1...')
resolve(1)
}, 0)
})
const step2 = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('step2...')
resolve(2)
}, 200)
})
const step3 = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('step3...')
resolve(3)
}, 500)
})
p1
.then(step1)
.then(step2)
.then(step3)
.then(
console.log,
console.error
);
// 上面代码中,p1后面有四个then,意味依次有四个回调函数。只要前一步的状态变为fulfilled,就会依次执行紧跟在后面的回调函数。
// 最后一个then方法,回调函数是console.log和console.error,用法上有一点重要的区别。console.log只显示step3的返回值,
// 而console.error可以显示p1、step1、step2、step3之中任意一个发生的错误。举例来说,如果step1的状态变为rejected,
// 那么step2和step3都不会执行了(因为它们是resolved的回调函数)。Promise 开始寻找,接下来第一个为rejected的回调函数,
// 在上面代码中是console.error。这就是说,Promise 对象的报错具有传递性。