Javascript - 根据条件使用链接函数的不同部分

时间:2018-05-03 20:05:27

标签: javascript ecmascript-6

通常在Javascript中,说我有这个代码:

return (dispatch) => {
    return axios.post(`${ROOT_URL}/company`, data).then(companyResponse => {

    }).catch(error => {
        throw (error);
    });
};

现在,在某些情况下,我想打电话给"帖子"带有一些参数的方法(如上所述),在其他情况下,我想使用" put"与不同的参数。 像这样:

// Pseudo code
if(some condition){
    // use this: axios.put(`${ROOT_URL}/company`, data, config)
}
    // use this: axios.post(`${ROOT_URL}/company`, data)
}

这样做的最佳做法是什么?

3 个答案:

答案 0 :(得分:1)

您可以使用带三元运算符的括号表示法根据条件使用post或put。如果满足条件,您还可以使用三元运算符传递配置,否则将空对象作为配置传递。

axios[condition ? 'put' : 'post'](`${ROOT_URL}/company`, data, condition ? config : {})

答案 1 :(得分:0)

您还可以使用axios配置对象指定方法:

const method = condition ? 'put' : 'post' // ternary operator
axios({ method, url: `${ROOT_URL}/company`, data })
  .then(...)
  .catch(...)

答案 2 :(得分:0)

  

像这样的东西

是的,完全是这样的。请记住,promises只是值,你可以传递它们并将它们存储在变量中或使它们成为表达式的结果。

return (dispatch) => {
    var promise;
    if (some condition)
        promise = axios.put(`${ROOT_URL}/company`, data, config);
    else
        promise = axios.post(`${ROOT_URL}/company`, data)
    return promise.then(companyResponse => {
        …
    });
}

或者使用条件运算符:

return (dispatch) => {
    return (some condition
      ? axios.put(`${ROOT_URL}/company`, data, config);
      : axios.post(`${ROOT_URL}/company`, data)
    ).then(companyResponse => {
        …
    });
}