我的函数可能 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 一个承诺。只有当这不是周围承诺的一部分时,才需要对价值进行承诺。
我认为使用不同的 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 一个承诺。只有当这不是周围承诺的一部分时,才需要对价值进行承诺。