如何用Promise的.then同时处理用户查询的成功与失败状态?
如何用单个
.then同时处理Promise的已兑现和已拒绝状态? 当然可以!其实Promise的.then()方法本身就支持传入两个参数——第一个是处理**已兑现(resolved)状态的回调函数,第二个就是专门处理已拒绝(rejected)**状态的回调,刚好能帮你把原本分开的.then和.catch逻辑合并到同一个.then调用里。
先看看你原来的代码:
getUserData(UserId) .then((data) => { if (data.Item.UserId == UserId ) { console.log("Welcome Back"); var checkFirst = "returning"; } }) .catch((err) => { console.log(err); console.log("It's a stranger"); var checkFirst = "firstSession"; });
用.then的双参数写法修改后是这样的:
getUserData(UserId) .then( // 第一个回调:处理Promise成功兑现的情况 (data) => { if (data.Item.UserId == UserId ) { console.log("Welcome Back"); var checkFirst = "returning"; } }, // 第二个回调:处理Promise被拒绝的情况 (err) => { console.log(err); console.log("It's a stranger"); var checkFirst = "firstSession"; } );
几个需要注意的细节:
- 这个第二个回调只会捕获原Promise本身的reject,不会捕获第一个回调函数内部抛出的错误(如果你的成功回调里有代码可能出错的话)。而原来的
.catch会捕获整个Promise链上的所有错误,包括成功回调里的异常。如果你的成功回调逻辑很安全不会抛错,那这种合并写法完全没问题;如果有抛错风险,建议额外加一个.catch来兜底。 - 另外你代码里的
var checkFirst是在回调内部声明的,外部作用域访问不到这个变量哦。如果需要在回调外使用这个值,记得提前在外部声明变量,或者用其他方式传递结果。
内容的提问来源于stack exchange,提问作者StMartin
相关产品推荐
相关产品推荐

