【问题标题】:My function could return a promise or value, how to avoid it? [duplicate]我的函数可以返回一个承诺或值,如何避免它? [复制]
【发布时间】:2016-06-24 03:11:47
【问题描述】:

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

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

还请注意,理想情况下,我希望有一个函数来“或”两个承诺并返回成功解决的任何一个。但我想不出更好的方法来实现这一点!

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

【问题讨论】:

  • 等待...这导致总是返回一个承诺。问题出在哪里?
  • @KevinB product 不是承诺,而是承诺返回的东西。
  • 正确,但它在 .then 回调中返回。整个函数仍在返回一个承诺。
  • 一般而言,您可以将其包装在resolve 中,但在这种特定 情况下,它可能不相关。这是一个很好的说明。
  • 感谢@tadman 和 KevinB!有趣的一点。

标签: node.js promise q


【解决方案1】:

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

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

return LineYService.findOneByName(name);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-09
    • 2019-09-18
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    相关资源
    最近更新 更多