- 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); ``` # 参考资料