我的功能可以返回一个承诺或价值,如何避免呢?

时间:2016-06-23 19:04:19

标签: node.js promise q

我认为拥有不同的退货类型是不好的做法。所以,这是我的功能,我希望它始终返回一个承诺。

我试图简化方案。让我们说我有两行产品(第X行和第Y行)以及我按名称检索产品的方式,每行都完全不同。

请注意,理想情况下,我希望有一个功能,以及#34;或者#34;两个承诺并返回成功解决的任何一个。但我无法想出一个更好的方法来实现这个目标!

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

1 个答案:

答案 0 :(得分:1)

你是对的,返回一致的东西比一个模棱两可的结果更好。通常,您可以轻松地将任意值转换为承诺。例如,使用resolve

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

return LineYService.findOneByName(name);

值得注意的是,正如凯文B所观察到的那样,这在这种特殊情况下是无关紧要的,因为你的外部函数总是返回一个承诺。如果这不是周围承诺的一部分,那么承诺价值的需要只是一个问题。