Promise 中的 Promise.prototype.then() 详解

在 JavaScript 中,Promise 是一种处理异步操作的方式。Promise 可以让我们更加方便地进行异步编程,而 Promise.prototype.then() 方法是 Promise 的核心方法之一。在本文中,我们将详细介绍 Promise.prototype.then() 方法的使用和原理。

基本用法

Promise.prototype.then() 方法用于指定 Promise 对象的状态改变时的回调函数。它接收两个参数:第一个参数是状态变为 resolved 时的回调函数,第二个参数是状态变为 rejected 时的回调函数。这两个回调函数都可以省略,如果省略,则相应的处理函数会被忽略。

其中,onResolved 和 onRejected 都是函数类型。onResolved 接收 Promise 的返回值作为参数,onRejected 接收 Promise 的错误信息作为参数。

下面是一个简单的例子,展示 Promise.prototype.then() 方法的基本用法:

在上述代码中,我们创建了一个 Promise 对象,它随机生成一个数值并根据其大小决定 Promise 的状态。如果生成的数值大于 0.5,则 Promise 的状态为 resolved,否则状态为 rejected。我们在 Promise.prototype.then() 方法中指定了 resolved 和 rejected 状态的回调函数,并在控制台中输出相应的信息。

链式调用

Promise.prototype.then() 方法返回一个新的 Promise 对象,因此它可以被链式调用。在链式调用中,每个 Promise 对象的状态变化都会影响后面的 Promise 对象。如果前一个 Promise 对象的状态为 resolved,那么后面的 Promise 对象就会接收到前一个 Promise 对象的返回值;如果前一个 Promise 对象的状态为 rejected,那么后面的 Promise 对象就会接收到前一个 Promise 对象的错误信息。

下面是一个简单的例子,展示 Promise.prototype.then() 方法的链式调用:

在上述代码中,我们创建了一个 Promise 对象,它的状态为 resolved,并返回了数值 2。然后我们在 Promise.prototype.then() 方法中指定了三个回调函数,每个回调函数都将前一个 Promise 对象的返回值乘以 2。最终,我们在控制台中输出了最后一个 Promise 对象的返回值 8。

返回值

Promise.prototype.then() 方法返回一个新的 Promise 对象,这个新的 Promise 对象的状态和值由前一个 Promise 对象的状态和值决定。如果前一个 Promise 对象的状态为 resolved,那么新的 Promise 对象的状态也为 resolved,并接收前一个 Promise 对象的返回值;如果前一个 Promise 对象的状态为 rejected,那么新的 Promise 对象的状态也为 rejected,并接收前一个 Promise 对象的错误信息。

下面是一个简单的例子,展示 Promise.prototype.then() 方法的返回值:

在上述代码中,我们创建了一个 Promise 对象 promise1,它的状态为 resolved,并返回了数值 2。然后我们在 Promise.prototype.then() 方法中指定了一个回调函数,它将前一个 Promise 对象的返回值乘以 2。这个回调函数返回了一个新的 Promise 对象 promise2,它的状态和值由前一个 Promise 对象的状态和值决定。最终,我们在控制台中输出了两个 Promise 对象,它们的状态和值分别为 resolved 和 2 和 resolved 和 4。

错误处理

在 Promise.prototype.then() 方法中,我们可以通过第二个参数来指定 rejected 状态的回调函数。如果前一个 Promise 对象的状态为 rejected,那么这个回调函数就会被调用,并接收前一个 Promise 对象的错误信息作为参数。

下面是一个简单的例子,展示 Promise.prototype.then() 方法的错误处理:

在上述代码中,我们创建了一个 Promise 对象,它的状态为 rejected,并返回了错误信息 Error。然后我们在 Promise.prototype.then() 方法中指定了 resolved 和 rejected 状态的回调函数。由于前一个 Promise 对象的状态为 rejected,因此第二个回调函数会被调用,并接收错误信息 Error 作为参数。最终,我们在控制台中输出了错误信息 Error 和 undefined。

异常处理

在 Promise.prototype.then() 方法中,如果前一个 Promise 对象的状态为 rejected,并且没有指定 rejected 状态的回调函数,那么异常就会被抛出。我们可以通过 Promise.prototype.catch() 方法来捕获这个异常。

下面是一个简单的例子,展示 Promise.prototype.catch() 方法的异常处理:

在上述代码中,我们创建了一个 Promise 对象,它的状态为 rejected,并返回了错误信息 Error。然后我们在 Promise.prototype.then() 方法中省略了 rejected 状态的回调函数,因此异常就会被抛出。我们在 Promise.prototype.catch() 方法中捕获了这个异常,并输出了错误信息 Error。

总结

在本文中,我们详细介绍了 Promise.prototype.then() 方法的使用和原理。我们了解了 Promise.prototype.then() 方法的基本用法、链式调用、返回值、错误处理和异常处理。希望本文能对你理解 Promise 有所帮助,并指导你在实际应用中正确使用 Promise。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65766acdd2f5e1655dfabcda


纠错
反馈