Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 您能否在函数中拦截并创建AxiosPromise?_Javascript_Typescript_Axios - Fatal编程技术网

Javascript 您能否在函数中拦截并创建AxiosPromise?

Javascript 您能否在函数中拦截并创建AxiosPromise?,javascript,typescript,axios,Javascript,Typescript,Axios,我想更改一个返回AxiosPromise的函数,该函数当前的工作方式如下: example(){ return api.get(url); } example(){ return api.get(url); } 其中api.get返回类型为axiopromise 这样,我可以修改原始承诺解析的对象: example(){ if(condition){ newPromise = new AxiosPromise<any>((res, rej) => { a

我想更改一个返回AxiosPromise的函数,该函数当前的工作方式如下:

example(){
 return api.get(url);
}
example(){
   return api.get(url);
}
其中api.get返回类型为
axiopromise

这样,我可以修改原始承诺解析的对象:

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);
}
example(){
如果(条件){
新承诺=新的AxiosPromise((res,rej)=>{
get(url).then(x=>{
x、 数据=3;
res(x);
}
};
回报新的承诺;
}否则返回api.get(url);
}
本例基于我对如何使用普通Promise对象的了解,但从我所看到的AxiosPromise不能以这种方式使用


目标是,如果条件为真,则能够修改响应,但不必在当前使用函数的任何地方进行重构。

我的建议与您已经在做的事情并没有完全不同。您现在使用的是常规承诺,我的解决方案也涉及到这一点。您提到的不可预见的副作用不太可能发生根据您返回的承诺类型,而不是该承诺解析为什么(即(axios响应对象)。只要您保持不变,我怀疑所有其他函数调用都会有任何问题。因此,我将如何修改您的
示例
函数。在其原始版本中,它看起来是这样的:

example(){
 return api.get(url);
}
example(){
   return api.get(url);
}
以下是您如何称呼它:

example().then(({data}) => console.log(data))
好的。到目前为止还不错,但对于初学者,我会将您的axios呼叫打包成一个常规承诺:

example(){
   return Promise.resolve(axios.get(url).then(response => response))
}

此更改不会更改调用方的任何内容。您仍然可以这样称呼它:

example().then(({data}) => console.log(data))
现在,您希望向函数添加一个条件,如果为true,则该条件会以某种方式修改响应。因此,它是:

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.
   }))
}

调用函数时,如何解决
axiopromise
问题?它是否像
example()那么简单。然后(response=>console.log(response.data))
?@codemonkey,我相信在大多数情况下我都能看到是的。(Codebase相当大,在我之前已经在几个人身上使用过).现在我实际使用的是上面的代码,但是有一个常规的承诺,而不是axiosPromise,并且在程序中没有发现任何问题,但是为了维护类型和避免不可预见的副作用,我想我会放弃这个stackoverflow问题。