重构函数以使用柯里化

Refactor functions to use currying

我想使用柯里化重构三个函数,但我正在努力了解 return 函数。我试图分解并设计咖喱函数作为起点。

我发现这个 medium article 的设计非常简单。

function discount(discount) {
    return (price) => {
        return price * discount;
    }
}

const tenPercentDiscount = discount(0.1);

tenPercentDiscount(500);

在高层次上,我的函数是这样调用的:

getCatHelper(prioritisedBreeds, catDefintions, debugToggle)
  .then((breed) => setConfigData(breed, config))
  .catch(() => false);
getPriorityBreed(prioritisedBreeds, catBreeds, catDefintions)
mapCatValueToKey(breed, catDefintions)

getCatHelper 的调用方式如下:


function useCatHook(
  config: Config,
  catDefintions: any = CAT_DEFS,
  getCat: (
      prioritisedBreeds,
      catDefintions,
      debugToggle,
  ) = getCatHelper,
  debugToggle,
): any {
  const [data, setData] = useState(undefined);
  const prioritisedBreeds = Object.keys(config);

  // ...

  getCatHelper(prioritisedBreeds, catDefintions, debugToggle)
      .then(breed => setData(breed))
      .catch(() => false);

  // ...
}

我的问题是:

  1. 我该如何设计?
  2. 我应该关心内部结构还是只设计功能及其功能return?
  3. 重构时,我应该先从外部函数还是内部函数开始工作?

任何帮助将不胜感激:)

我希望钩子不知道 CAT_DEFS 并将其直接传递给 getCatHelper

我做了这个作品:

export function getCatHelper {
    return (
        prioritisedBreeds,
        catDefintions,
        debugToggle,
        getDataLayer = getDataFromRequest
    ) {

    // ...

    };
}
function useCatHook(
  config,
  getCat (
      prioritisedBreeds,
      catDefintions,
      debugToggle
  ) = getCatHelper(CAT_DEFS),
  debugToggle
) {

  // ...

}