我有Axios与所有拦截器。然后我有api
文件夹,并将每个功能请求基于api端点在它里面。
,例如:
api/user.js
api/posts.js
api/auth.js
等等…在JS文件中,我有多个get请求,像这样:
export getUsers = ({onSuccess, onError, onDone}) => {
return Axios.get("Smaple/users/url").then(res => {
if ( res && res.data ) {
onSuccess(res.data);
}
}).catch(err => {
onError(err);
}).finally(()=>{
onDone();
})
}
我有像这样的多种功能。然后我注意到我复制了自己,因为then
,catch
和finally
的主体就像其他的一样。
那么是否可以像下面这样创建一个全局get请求呢?
const GET_REQUEST = (URL, {onSuccess, onError, onDone}) => {
return Axios.get(URL).then(res => {
if ( res && res.data ) {
onSuccess(res.data);
}
}).catch(err => {
onError(err);
}).finally(()=>{
onDone(err);
})
}
,然后用户GET_REQUEST
如下:
export getUsers = ({onSuccess, onError, onDone}) => {
GET_REQUEST('Smaple/users/url', {onSuccess, onError, onDone})
}
这让我想到也许以后我可能会以不同的方式处理这些请求这意味着我的GET_REQUEST
必须有多个if和else语句。我认为这并不好。这是不是一个好的做法?
遵循清洁代码原则之一(我强烈建议您阅读名为Clean Code (Robert C Martin)),你的第一种方法是正确的。尽量遵循DRY原则,避免过度考虑代码将来的行为。这将使您的解决方案更清晰,更易读。
你的代码总是在需要的时候被重构。一旦完成,不要犹豫更改代码。但是我会让代码只包含一个函数。
关于创建全局函数的事实,我的目标是创建一个类(到服务器的连接器)并在那里定义这个函数。