Api.get(...).then(...).catch(...).finally Is Not A Function


Answer :

I suggest to use another then instead of using finally. then after catch is works like a finally. don't forget to use at least one catch in your promise chain, in order to handle your instructions failure.

So this two line of code is the same:

api.get(…).then(…).catch(…).then(...) 

and

api.get(…).then(…).catch(…).finally(...) 

Only a native Promise (constructed with new Promise) is guaranteed to have a .finally method (in newer environments). (in older environments, .finally won't work at all with Promises created with new Promise)

It looks like axios doesn't use new Promise internally - rather, it just returns a thenable, which is not guaranteed to have a finally method (and because it doesn't, it throws an error).

While you could use the explicit Promise construction antipattern to wrap the axios call in a native new Promise, so that it has Promise.prototype.finally in its prototype chain, a better option (thanks Bergi!) is to just use Promise.resolve, which will turn a thenable into a native Promise while preserving the failure or success of the thenable:

get(API, params = this.defaultParams) {   this.call = "GET";   let constructedURL = this.constructURL(API, params);   axiosRetry(axios, { retries: this.retry });   return Promise.resolve(axios.get(constructedURL, this.config)); } 

Comments

Popular posts from this blog

Are Regular VACUUM ANALYZE Still Recommended Under 9.1?

Can Feynman Diagrams Be Used To Represent Any Perturbation Theory?