繁体   English   中英

你能在 function 中拦截并创建 AxiosPromise 吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM