异步编程02:Promise.then()
阅读 2.4k
Promise的方法有很多,这里我把Promise.then()单独拿出来,是因为then()方法是一个非常重要的点。
先请大家思考一个问题:为什么我们可以使用then链?这个then()方法到底干了啥?
then()链的秘密
为了解答这个疑惑,先来看看它的语法:
语法:Promise.then(onFulfilled[, onRejected])
返回值:返回一个Promise
原来,每次调用then()时,实际上会返回一个Promise
,而每个Promise对象都拥有then()方法,这就是为什么能够使用then链的原因。
我们来看一个例子:
let p1 = new Promise((resolve, reject) => {
resolve(100)
})
p1.then(value => {
console.log(value)
return 200
}).then(value => {
console.log(value)
console.log('all finished..')
})
当调用第一个then()时,会返回另外一个Promise对象,其状态为fulfilled,值为200,然后继续执行第二个then。如果把这个实例拆开,其实就是这样:
let p1 = new Promise((resolve, reject) => {
resolve(100)
})
let p2 = p1.then(value => {
console.log(value)
return 200
})
p2.then(value => {
console.log(value)
console.log('all finished..')
})
返回值
既然then()是一个方法,其返回值到底怎么定义呢?具体的返回值依据以下规则返回:
- 返回了一个值,那么then返回的Promise将会成为fulfilled状态,值为返回的值。
- 没有返回任何值,那么then返回的Promise将会成为fulfilled状态,值为undefined。
- 抛出一个错误,那么then返回的Promise将会成为rejected状态,值为抛出的错误值。
- 返回一个Promise,值为被返回的那个Promise。
小结
Promise这部分已经说完了,接下来会进入async-await
的讲解,请见《异步编程03:async-await》。
最后编辑于: 2022-06-28