我有一个名为status的api端点。应该像这样使用:
status/ohio/columbus
status/nebraska/fremont
status/ohio/columbus/police
status/nebraska/fremont/fire
州和城市路径是强制性的,但部门不是。
我想要一个用返回值更新回调的函数。以下功能是否合理或令人困惑?我应该有多个函数 - getStatus和getStatusForDepartment吗?
function getStatus(state, city, department, callback)
{
let status = "status/"+state+"/"+city
if(typeof department != "function"){
status = status+"/"+ department
}else{
callback = department
}
...
}
答案 0 :(得分:1)
你的方法很完美,也是一种常见的模式。另一个选择是让你的函数返回一个Promise,而不是依赖一个回调。这将允许您绕过检查最后一个参数是函数还是回调
function getStatus(state, city, department) {
return new Promise((resolve, reject) => {
let status = "status/"+state+"/"+city
if (department) {
status += '/' + department;
}
...
if (successThingHappens) {
resolve(data);
} else {
reject(error);
}
});
}
getStatus('CA', 'San Francisco').then((data) => {
console.log('do something with', data);
}).catch((err) => {
console.error('something went wrong', error);
});
答案 1 :(得分:0)
我不理解关于"多功能的部分而不是"。 但是关于在参数列表中间有可选参数的要求,我遵循对象方法。
而不是做
getStatus(state, city, department, callback)
我喜欢这个
var arg_list = {"state": state, "city": city, "department": department, "callback": callback};
getStatus(arg_list);
在函数中,将object中的值赋给变量。 这样您就可以省略并使用任何参数。
这种方法有一个很好的好处。我们经常需要更改参数列表。有时添加新的,有时从参数列表中删除一些,有时我们需要更改顺序等。所有这些操作需要在使用参数时非常小心,因为这可能使函数定义与函数调用不同。但是通过这种方法,这种情况很容易处理。