- Objective:
- Breadcrumb:
# 概念阐释
## 语义
`promise`返回一个状态,`.then()`回调函数将告诉我们状态后要做的事,即解析promise函数中resolve的值。
`promise.then()`允许链接到其他promise对象,从而实现[[js 异步 Promise 链式调用|链式调用]]。
## 语法
```js
promise.then(onFufilled,onRejected);
```
- promise.then接收2种状态后的函数,`onFufilled,onRejected`函数
- `promise`可替换为函数调用,例如「问题」答案
- `promise`也可以是储存promise的变量名称,例如「实例」
# 实例
```js
let prom = new Promise((resolve, reject) => {
let num = Math.random();
if (num < .5 ){
resolve('Yay!');
} else {
reject('Ohhh noooo!');
}
});
// 如果这时打印console.log(prom);将只会看到<pending>的结果,只有.then和.catch才可以看到解决的状态
prom.then((resolvedValue)=>{console.log(resolvedValue)})
.catch((rejectionReason)=>{console.log(rejectionReason)});
//也可以写成
const onFuilled = (resolvedValue) => {
console.log(resolvedValue);
}; //resolvedValue是传递prom函数resolve的解析值
const onRejected = (rejectionReason) => {
console.log(rejectionReason);
}; //rejectionReason是传递prom函数reject的解析值
prom.then(onFuilled, onRejected);
```
- 如果直接`console.log(prom)`则返回一个状态 resolve或reject
- 如果状态resolve,then返回yay结果
- 如果状态reject,then返回ohhh noooo!
# 相关内容
在实践中,通常更希望使用[[js 异步 Promise.catch()方法]]来捕获被拒绝的状态,而不是在`promise.then()`中写2种状态。
# 问题
[练习题](https://www.codecademy.com/journeys/full-stack-engineer/paths/fscj-22-front-end-development/tracks/fscj-22-async-javascript-and-http-requests/modules/wdcp-22-learn-javascript-syntax-promises-4094827c-7a8d-4f11-ac0a-522d27c8e542/lessons/promises/exercises/onfulfilled-onrejected)
1. 给checkInventory函数写一个`promise.then()`的回调函数,包含resolved和reject;
2. 将reject写入`.catch()`方法
# 问题答案
```js
const handleSuccess = (resolvedValue)=> {
console.log(resolvedValue);
};
const handleFailure = (rejected) => {
console.log(rejected);
};
checkInventory(order).then(handleSuccess,handleFailure);
```
```js
checkInventory(order)
.then(handleSuccess)
.catch(handleFailure);
```
# 参考资料