Promised原理及其应用

Promise是ECMAScript6引入的处理异步操作的机制,它有pending、fulfilled和rejected三种状态。Promise对象的then()、catch()和finally()方法用于链式处理回调,分别对应成功、失败和无论结果如何都会执行的情况。async和await关键字则简化了Promise的使用,await仅在async函数内有效,用于等待Promise解析并返回结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       在JS的异步编程中Promise是一个很重要的的对象。Promise 是一个 ECMAScript 6 提供的类,目的是更加优雅地书写复杂的异步任务。在语法上Promise是一个对象,从它可以获取异步操作的消息,用于表示一个异步操作的最终完成 (或失败)及其结果值。

       Promise对象代表一个异步操作,一共有3种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。Promise对象支持俩个属性:state和result。当Promise对象处于“pending”时,结果为undefined。当Promise对象“fulfilled”时,结果是一个值,当一个Promise对象是“rejected”时,结果是一个错误对象。

        Promise。then()有俩个参数,一个是成功时的回调,另一个是失败时的回调。俩者都可以选,所以我们可以为成功或者失败添加回调。用通俗的话来说就是通过对then()的结果进行判断来对哪个函数进行调用。

这个图就形象的表达了Promise.then()的用法

       同时Promise构造函数在JS中也经常用于创建Promise对象的内置函数。Promise 构造函数接受一个函数作为参数,该函数是同步的并且会被立即执行,所以我们称之为起始函数。起始函数包含两个参数 resolve 和 reject,分别表示 Promise 成功和失败的状态。

起始函数执行成功时,它应该调用 resolve 函数并传递成功的结果。当起始函数执行失败时,它应该调用 reject 函数并传递失败的原因。

Promise 构造函数返回一个 Promise 对象,该对象具有以下几个方法:

1.then:用于处理Promise成功状态的回调函数。

2.catch:用于处理Promise失败状态的回调函数。

3.finally:无论Promise是失败还是成功,都会执行的回调函数。

Promise 类有 .then() .catch() 和 .finally() 三个方法,这三个方法的参数都是一个函数,.then() 可以将参数中的函数添加到当前 Promise 的正常执行序列,.catch() 则是设定 Promise 的异常处理序列,.finally() 是在 Promise 执行的最后一定会执行的序列。 .then() 传入的函数会按顺序依次执行,有任何异常都会直接跳到 catch 序列:

 其执行结果为

  

       async 属性是一个布尔属性。async 属性可以用于控制脚本的异步加载,并在加载完成后立即执行(异步加载,同步执行)。

    当 <script> 标签设置了 async 属性时,浏览器会异步地加载脚本文件,并且在下载完成后立即执行脚本,而不会等待页面的渲染。这样可以避免脚本的下载和执行对页面渲染的阻塞,从而提高页面的加载速度。需要注意的是由于 async 属性的设置会使得脚本的执行顺序不再保证,因此在编写代码时需要注意脚本之间的依赖关系。如果多个脚本之间有依赖关系,需要使用 defer 属性或者手动管理加载顺序来确保脚本的正确执行顺序。并且async 属性仅适用于外部脚本(只有在使用 src 属性时)。

     await 操作符用于等待一个 Promise 对象, 它只能在异步函数 async function 内部使用。

      正常情况下,await 命令后面是一个 Promise 对象,它也可以跟其他值,如字符串,布尔值,数值以及普通函数。

 

await针对所跟不同表达式的处理方式:

1.Promise 对象:await 会暂停执行,等待 Promise 对象 resolve,然后恢复 async 函数的执行并返回解析值。

2.非 Promise 对象:直接返回对应的值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值