在 javascript 中链接函数时如何避免冗余?
How to avoid redundancy when chainig functions in javascript?
我创建了一个为我处理更新的函数,您可以在 post 和获取更新之间进行选择。
唯一 post/get 不同的是开始调用 (axios.post()
/axios.get()
)。
之后他们得到相同的函数链接(.then()
,.catch()
)
尽管如此,除了编写 if/else
语句并编写两次链接函数之外,我没有看到其他方法,这会导致代码过多并破坏 DRY。
我怎样才能避免这种情况?
这是我的代码:
update function(
url,
usepost = true,
arg = {},
callback = () => {},
errorcb = () => {}
) {
console.log(arg);
if (usepost) {
axios
.post("https://example.com/" + url, arg)
.then(response => {
//do stuff
callback();
})
.catch(error => {
// do error stuff
errorcb();
});
} else {
axios
.get("example.com/" + url, { params: arg })
.then(response => {
// do stuff
callback();
})
.catch(error => {
// do error stuff
errorcb();
});
}
}
(我不想将我的代码导出到函数)
好吧,你有两种方法可以做到这一点:
第一个是使用您的方式,带有回调。您只需要将请求存储在一个变量中,然后在这个变量上使用“then/catch”。
function update(
url,
usepost = true,
arg = {},
callback = () => {},
errorcb = () => {}
) {
let request;
if (usepost) {
request = axios.post("https://example.com/" + url, arg)
} else {
request = axios.get("example.com/" + url, { params: arg })
}
request.then(response => {
// do stuff
callback();
})
.catch(error => {
// do error stuff
errorcb();
});
}
第二种方法,在我看来是一种更好的方法,就是简单地使您的函数异步并 return 请求(这是一个承诺)。使用这种方式,您可以使用 promises 轻松管理异步内容。
async function update(
url,
usepost = true,
arg = {}
) {
if (usepost) {
return axios.post("https://example.com/" + url, arg)
} else {
return axios.get("example.com/" + url, { params: arg })
}
}
我创建了一个为我处理更新的函数,您可以在 post 和获取更新之间进行选择。
唯一 post/get 不同的是开始调用 (axios.post()
/axios.get()
)。
之后他们得到相同的函数链接(.then()
,.catch()
)
尽管如此,除了编写 if/else
语句并编写两次链接函数之外,我没有看到其他方法,这会导致代码过多并破坏 DRY。
我怎样才能避免这种情况?
这是我的代码:
update function(
url,
usepost = true,
arg = {},
callback = () => {},
errorcb = () => {}
) {
console.log(arg);
if (usepost) {
axios
.post("https://example.com/" + url, arg)
.then(response => {
//do stuff
callback();
})
.catch(error => {
// do error stuff
errorcb();
});
} else {
axios
.get("example.com/" + url, { params: arg })
.then(response => {
// do stuff
callback();
})
.catch(error => {
// do error stuff
errorcb();
});
}
}
(我不想将我的代码导出到函数)
好吧,你有两种方法可以做到这一点:
第一个是使用您的方式,带有回调。您只需要将请求存储在一个变量中,然后在这个变量上使用“then/catch”。
function update(
url,
usepost = true,
arg = {},
callback = () => {},
errorcb = () => {}
) {
let request;
if (usepost) {
request = axios.post("https://example.com/" + url, arg)
} else {
request = axios.get("example.com/" + url, { params: arg })
}
request.then(response => {
// do stuff
callback();
})
.catch(error => {
// do error stuff
errorcb();
});
}
第二种方法,在我看来是一种更好的方法,就是简单地使您的函数异步并 return 请求(这是一个承诺)。使用这种方式,您可以使用 promises 轻松管理异步内容。
async function update(
url,
usepost = true,
arg = {}
) {
if (usepost) {
return axios.post("https://example.com/" + url, arg)
} else {
return axios.get("example.com/" + url, { params: arg })
}
}