回调参数之前的选项参数

时间:2016-09-23 18:11:38

标签: javascript rest

我有一个名为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
    }
    ...
}

2 个答案:

答案 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中的值赋给变量。 这样您就可以省略并使用任何参数。

这种方法有一个很好的好处。我们经常需要更改参数列表。有时添加新的,有时从参数列表中删除一些,有时我们需要更改顺序等。所有这些操作需要在使用参数时非常小心,因为这可能使函数定义与函数调用不同。但是通过这种方法,这种情况很容易处理。