我的函数可能 return 一个承诺或价值,如何避免呢?

My function could return a promise or value, how to avoid it?

我认为使用不同的 return 类型是不好的做法。所以,这是我的职能,我希望它始终 return 一个承诺。

我试图简化场景。假设我有两条产品线(X 线和 Y 线),我按名称检索产品的方式从每条线中完全不同。

另请注意,理想情况下,我希望有一个函数来 "or" 两个承诺和 return 成功解决的那个。但我想不出更好的方法来实现这一目标!

ProductService.findProductByName = function findProductByName(name) {
  return LineXService.findOneByName(name) // promise
    .then(function _returnProduct(product) {
      return product
        ? product // value
        : LineYService.findOneByName(name)); // promise
    })
};

你说得对,返回一致的结果比模棱两可的结果要好。通常,您可以很容易地将任意值转换为 promise。例如使用 resolve:

if (product) {
  return Promise.resolve(product);
}

return LineYService.findOneByName(name);

值得注意的是,正如 Kevin B 所观察到的,这在这种特殊情况下是无关紧要的,因为您的外部函数总是 returns 一个承诺。只有当这不是周围承诺的一部分时,才需要对价值进行承诺。