javascript:es6的promise函数

本文详细解析了Promise的概念及其在异步编程中的应用。介绍了Promise作为异步操作结果的占位符,其生命周期包括挂起态、已完成及已拒绝状态。并通过示例展示了如何使用then()方法处理异步操作的成功或失败。

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

资料来源:《深入理解es6翻译完整版》

Promise 是为异步操作的结果所准备的占位符。函数可以返回一个 Promise,而不必订阅一个

事件或向函数传递一个回调参数,就像这样:
// readFile 承诺会在将来某个时间点完成
let promise = readFile("example.txt");
第十一章 Promise与异步编程
222
在此代码中,  readFile()  实际上并未立即开始读取文件,这将会在稍后发生。此函数反而
会返回一个 Promise 对象以表示异步读取操作,因此你可以在将来再操作它。你能对结果进
行操作的确切时刻,完全取决于 Promise 的生命周期是如何进行的。

生命周期

Promise 的生命周期
每个 Promise 都会经历一个短暂的生命周期,初始为挂起态( pending state),这表示异步操作尚未结束。一个挂起的 Promise 也被认为是未决的( unsettled )。上个例子中的Promise 在  readFile()  函数返回它的时候就是处在挂起态。一旦异步操作结束, Promise就会被认为是已决的( settled ),并进入两种可能状态之一:
1. 已完成( fulfilled ): Promise 的异步操作已成功结束;
2. 已拒绝( rejected ): Promise 的异步操作未成功结束,可能是一个错误,或由其他原
因导致。

内部的  [[PromiseState]]  属性会被设置为  "pending"  、  "fulfilled"  或  "rejected"  ,以反映 Promise 的状态。该属性并未在 Promise 对象上被暴露出来,因此你无法以编程方式判断 Promise 到底处于哪种状态。不过你可以使用  then()  方法在 Promise 的状态改变时执行一些特定操作。

简单理解下,就是promise会有三种状态,一种是pending状态,就是当我们开始操作的时候,这个时候他只是去执行我们的指令,其次,当任务完成后,比如ajax返回结果后,他再根据我们的操作,返回两个结果,一个是fulfilled,就是我们常用的reslove,其次是rejected,也是我们常用的rejected。

then方法

then()  方法在所有的 Promise 上都存在,并且接受两个参数。第一个参数是 Promise 被完成时要调用的函数,与异步操作关联的任何附加数据都会被传入这个完成函数。第二个参数则是 Promise 被拒绝时要调用的函数,与完成函数相似,拒绝函数会被传入与拒绝相关联的任何附加数据。

可能理解会有点麻烦,就大概是这样,当我们创建一个promise后,当一个状态改变的时候,就会触发then事件,

此时,then内部定义的事件就会被触发,

如:上一篇博客中,当ajax成功的时候,会调用then的方法,其次,会调用catch的方法,

当然,也是可以这样的:

   http.post("https://aimianshiguan.com/znzp/open/downYuyin.shtml", a).then((sres) => {
        console.log(sres);
      },(fres) => { console.log(fres); })

各有爱好,我比较喜欢用catch来处理异常错误,这样子比较好看点

then()  与  catch()  背后的意图是让你组合使用它们来正确处理异步操作的结果。此系统要优于事件与回调函数,因为它让操作是成功还是失败变得完全清晰(事件模式倾向于在出错时不被触发,而在回调函数模式中你必须始终记得检查错误参数)。只需知道若你未给Promise 附加拒绝处理函数,所有的错误就会静默发生。建议始终附加一个拒绝处理函数,即使该处理程序只是用于打印错误日志。

rejected()方法,Thenable:


这两个先压着吧,,,因为我测试的时候感觉兼容有点尴尬,可能是我要求有点高吧,所以就不讲解了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值