异步编程02:Promise.then()

阅读 2.4k
标签: JavaScript

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

评论(0条)

(必填)
复制成功