我认为拥有不同的返回类型是不好的做法。因此,这是我的功能,我希望它始终回报诺言。
我试图简化场景。假设我有两行产品(X和Line y),而我按名称检索产品的方式,每行与彼此完全不同。
另外,请注意,理想情况下,我想具有"或"两个承诺"的函数,然后返回成功解决的任何诺言。但是我想不出一种更好的方法!
ProductService.findProductByName = function findProductByName(name) {
return LineXService.findOneByName(name) // promise
.then(function _returnProduct(product) {
return product
? product // value
: LineYService.findOneByName(name)); // promise
})
};
您是对的,返回一致的东西比模棱两可的结果更好。通常,您可以很容易地将任意价值投入到承诺中。例如使用resolve
:
if (product) {
return Promise.resolve(product);
}
return LineYService.findOneByName(name);
正如凯文·B(Kevin B)所观察到的那样,值得注意的是,在这种特殊情况下,这是无关紧要的,因为您的外部功能始终返回承诺。在不属于周围的承诺的一部分时,需要诺言的价值才是一个问题。