Promise状态变化

博客介绍了JavaScript中Promise的相关知识。Promise有pending、resolved、rejected三种状态,状态变化有两种且不受外界影响、结果不可逆转。resolved触发then回调,rejected触发catch回调,then和catch正常执行返回resolved,报错则返回rejected。

promise共有三种状态:pending(待定中)| resolved(已完成)| rejected(已拒绝)。

其状态变化过程有两种:pending >>> resolved 或 pending >>> rejected.

状态变化过程不受外界影响,结果不可逆转。


状态与触发then和catch回调的关系:

  • resolved状态会触发后续then的回调。
  • rejected状态会触发后续catch的回调。
  • 当去触发then的回调时,会一直向下寻找最近的then回调,这个过程中遇到的所有catch的回调都会被略过不再执行。触发catch的回调时同理。
  • then的回调正常执行返回resolved状态,报错则返回rejected状态。
  • catch的回调正常执行返回resolved状态,报错则返回rejected状态。
### 如何在 JavaScript 中从外部改变 Promise 的状态JavaScript 中,`Promise` 构造函数接收一个执行器函数 `exector` 作为参数。此执行器函数会在创建 `Promise` 实例时立即被调用,并传入两个参数:`resolve` 和 `reject` 函数[^2]。 通过调用这两个函数中的任意一个可以从外部改变 `Promise` 的状态: - 调用 `resolve(value)` 将使 `Promise` 进入 **fulfilled** (已解决) 状态。 - 调用 `reject(reason)` 则会使 `Promise` 进入 **rejected** (已拒绝) 状态。 一旦 `Promise` 的状态发生变更,则无法再更改该状态。下面给出一段具体的代码示例来展示这一过程: ```javascript // 创建一个新的 Promise 对象 const myPromise = new Promise((resolve, reject) => { let condition = true; // 假设这是某些条件判断 if(condition){ resolve('Success!'); // 改变为 fulfilled 状态 }else{ reject('Error occurred.'); // 改变为 rejected 状态 } }); myPromise.then( message => console.log(message), // 处理成功的回调 error => console.error(error) // 处理失败的回调 ); ``` 当上述代码片段中的 `condition` 变量为真(`true`)时,将会触发 `resolve()` 并打印 `'Success!'`; 如果它为假 (`false`), 那么就会触发 `reject()`, 打印错误信息 `'Error occurred.'`. 值得注意的是,在实际应用中,通常不会直接暴露 `resolve` 或者 `reject` 给全局作用域去手动控制 `Promise` 的状态变化;而是应该把它们放在合适的上下文中以便安全地处理异步逻辑.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值