如何在Axios中对同一个响应对象两次调用then方法?
解决Axios中同一个响应对象多次调用then的问题
你的问题核心在于函数a内部的.then()回调没有返回响应对象resp,导致Promise链传递的是undefined,后续a().then(...)的回调自然拿不到期望的响应对象。
只需在第一个.then()的回调里显式返回resp,就能让整个Promise链传递同一个响应对象:
function a() { return axios.get('/foo').then(function(resp){ // 处理resp,比如401时触发登出逻辑 return resp; // 关键:返回响应对象,供后续then使用 }) } // 调用方代码 a().then(function(resp) { // 现在可以正常获取同一个resp对象了 }).catch(console.log).then(clearLoadingBar)
补充说明
- Promise的
.then()方法会返回一个新的Promise,其resolved值由回调函数的返回值决定。如果回调没有返回值,默认返回undefined,后续then的回调就会接收这个undefined。 - 如果需要在第一个then里处理异常场景(比如401),可以在处理后抛出错误交给
catch处理,正常情况仍返回resp:
function a() { return axios.get('/foo').then(function(resp){ if (resp.status === 401) { // 执行登出逻辑 throw new Error('未授权,请重新登录'); } return resp; }) }
内容的提问来源于stack exchange,提问作者Kokizzu
相关产品推荐
相关产品推荐

