专业的编程技术博客社区

网站首页 > 博客文章 正文

React三浅一深之Promise(三深三浅)

baijin 2024-08-19 11:30:22 博客文章 14 ℃ 0 评论

Promise简介

Promise 对象用于一个异步操作的最终完成(或失败)及其结果值的表示。(简单点说就是处理异步请求。。我们经常会做些承诺,如果我赢了你就嫁给我,如果输了我就嫁给你之类的诺言。这就是promise的中文含义。一个诺言,一个成功,一个失败。) 这是MDN上对promise的介绍,文字含义不如代码来的实在。那么怎么通过代码了解Promise呢?

console.dir(Promise)

可以看到Promise对象其实是一个构造函数。

Promise静态方法

  1. Promise.all()

  2. Promise.race()

  3. Promise.reject()

  4. Promise.resolve()

Promise实例方法

  1. Promise.prototype.catch()

  2. Promise.prototype.then()

Promise用法

Promise 是异步编程的一种解决方案,那么我们接下来看看Promise到底怎么用!

创建一个Promise实例

从图中我们可以看出promise1的状态时“pending”、promise2的状态是“resolved”、promise3的状态是“rejected”。

一个 Promise有以下几种状态:

  • pending: 初始状态,不是成功或失败状态。

  • resolved: 意味着操作成功完成。

  • rejected: 意味着操作失败。

resolve方法用于将promise状态: pending => resolved

reject方法用于将promise状态:pending => rejected

现在我们知道了resolve和reject方法可以改变promise的状态,那么像如下代码又会发生什么情况呢?

我们可以看到promise1最后的状态是“resolved”,promise2最后的状态是“rejected”。因此我们可以知道一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从Pending变为Resolved和从Pending变为Rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。

静态方法

Promise.all(array)

此方法用于将多个promise实例包装成一个新的promise实例,这个新的promise实例只有当传入的所有promise实例的状态都为resolved时状态才会变成resolved,并调用成功方法,成功方法的回调参数为传入promise实例的返回值数组(顺序与传入promise实例顺序一致),所以我们可以用此方法实现并行执行多个异步方法。

Promise.race(array)

此方法同样是用于将多个promise实例包装成一个新的promise实例,但是与Promise.all方法不一样的地方是这个新的promise实例只要传入的promise实例中的任意一个状态改变,这个新实例的状态就会跟着改变,并且回调方法中的参数为改实例的返回值。

Promise.reject(reason)

返回一个状态为失败的Promise对象,并将给定的失败信息传递给对应的处理方法。

Promise.resolve(value)

返回一个状态由给定value决定的Promise对象。简单的用法就是可以用此方法讲一个现有的对象转换为Promise对象。

value分为以下三种情况

  1. Promise.resolve(value);

    当value为空,基本类型或者不带then方法的对象时,返回的Promise对象状态为fulfilled,并且将该value传递给对应的then方法

  2. Promise.resolve(promise);

    当value为promise对象时,则直接返回该对象。

  3. Promise.resolve(thenable);

    当value为thenable(即,带有then方法的对象),返回的Promise对象的最终状态由then方法执行决定。



实例方法

Promise.prototype.then()

相信大家看到这里已经明白then方法的用处了,Promise.prototype.then()用于为 Promise 实例添加状态改变时的回调函数并返回一个新的promise。该方法的第一个参数是Resolved状态的回调函数,第二个参数(可选)是Rejected状态的回调函数

Promise.prototype.catch()

用于指定发生错误时的回调函数。如果这个回调被调用,新 promise 将以它的返回值来resolve,否则如果当前promise 进入fulfilled状态,则以当前promise的肯定结果作为新promise的肯定结果.

在promise方法或then回调方法中抛出错误都会被catch捕获。

今天就写到这里,文章中有错误的地方希望大家指出,谢谢。

望大家多多转发,好人一生平安

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表