从承诺中提取.then和.catch

时间:2017-05-31 20:44:41

标签: javascript promise refactoring

我编写了一个通用的.js crud对象,它包含了用于与服务器通信的所有方法。但是我想避免重复.then和.catch,我想在外部方法中抽象出这个功能。

不确定我尝试实现的目标是否可行。

我的代码如下:

all(url, success, fail){
  return new Promise((resolve,reject) => {
    _get(url)
    .then((response) => {
      if (response.status == 200) {
        success.call(this,response);
        return resolve();
      }
    })
    .catch((error) => {
      fail.call(this, error);
      reject(error);
    });
});}, submit, update .....

仙境想要的结果:

all(url, success, fail){
  return new Promise((resolve, reject) => {
    _get(url).handle(args);
  });
}

1 个答案:

答案 0 :(得分:2)

只需避开Promise constructor antipattern和回调,你就会好起来!

function all(url) {
  return _get(url).then((response) => {
    if (response.status == 200) {
      return response;
    }
    // most likely you want to `throw` an error here?
  });
}