[英]Can you intercept and create a AxiosPromise within a function?
我想更改一个 function ,它返回一个 AxiosPromise,它当前的工作方式如下:
example(){
return api.get(url);
}
其中 api.get 返回AxiosPromise<any>
类型的 object
对于这样的事情,我可以修改 object 原来的 promise 解决:
example(){
if(condition){
newPromise = new AxiosPromise<any>((res, rej) => {
api.get(url).then( x => {
x.data = 3;
res(x);
}
};
return newPromise;
} else return api.get(url);
}
此示例基于我对如何使用普通 Promise object 的了解,但据我所知,AxiosPromise 不能以这种方式使用。
目标是能够在条件为真时修改响应,但不必在当前使用 function 的所有地方进行重构。
我的建议与您已经在做的事情并没有完全不同。 您现在使用的是普通的 promise,我的解决方案也涉及到它。 您提到的不可预见的副作用不太可能来自您返回的 promise 的类型 spring ,而是来自 promise 解析为 ie 的内容(axios响应对象) 只要您保持完整,我怀疑对您的 function 的所有其他调用都会有任何问题。 因此,这就是我将如何修改您的example
function。 在它原来的样子是这样的:
example(){
return api.get(url);
}
这就是你所说的:
example().then(({data}) => console.log(data))
好的。 到目前为止一切顺利,但对于初学者来说,我会将您的 axios 调用包装到常规 promise 中:
example(){
return Promise.resolve(axios.get(url).then(response => response))
}
此更改不会更改调用方的任何内容。 你仍然会这样称呼它:
example().then(({data}) => console.log(data))
现在您想向 function 添加一个条件,如果为真,则以某种方式修改响应。 所以这里是:
example(condition){
return Promise.resolve(axios.get(url).then(response => {
if(condition === true) response.data.somekey = 'Changed';
return response; //The response object is intact save for the one change.
}))
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.