在 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 })
    }
}