Javascript 使用未解析的承诺进行条件筛选/分支
我希望根据其结果筛选和路由承诺,因此我使用这样的代码,使用未解析的承诺来省略执行分支:Javascript 使用未解析的承诺进行条件筛选/分支,javascript,promise,Javascript,Promise,我希望根据其结果筛选和路由承诺,因此我使用这样的代码,使用未解析的承诺来省略执行分支: const resultP = getSomething() .then((result) => result === 'good' ? true : false ) const goodStuffP = resultP // procceds if r is true, otherwise returns unresolved promise (so that branch is o
const resultP = getSomething()
.then((result) => result === 'good' ? true : false )
const goodStuffP = resultP
// procceds if r is true, otherwise returns unresolved promise (so that branch is omitted)
.then((r) => r ? r : new Promise(() =>{}))
.then(...do good stuff...)
const badStuffP = resultP
// procceds if r is false, otherwise returns unresolved promise
.then((r) => !r ? r : new Promise(() =>{}))
.then(...do bad stuff...)
我想知道这种方法是否有问题,在我看来不好的事情是一个未解决的承诺
那么,就可能出现的技术问题(如泄漏)而言,以这种方式使用未解决承诺是否有效?问题不在于编程风格的好坏。不,不要对控制流使用未解决的承诺。只需在
中使用如果
/其他
,然后
回调:
const resultP = getSomething().then(result => {
if (result === 'good') {
// ...do good stuff, return a value
} else {
// ...do bad stuff, return a value
}
});
实际上,答案似乎是这样的:在代码中使用从未解析过的承诺是绝对有效的。这就像不调用回调一样,不应该强制调用回调。只需捕捉并正确处理错误 Nodejs回购问题讨论了代码中未解决的承诺:
如果(r){/*做好事*/}或者{/*做坏事*/},为什么不直接使用
?您应该从阅读“否”开始,不要对控制流使用未解决的承诺。只要使用if
/else
@Phil问题是关于使用未解决承诺的有效性,而不是如何摆脱它。@WHITECOLOR这是可怕的,过于复杂为什么,这是显而易见的选择,我问为什么我的选择是无效的如果是这样的话。@WHITECOLOR因为不使用显而易见的是错误的编码,简单有效的解决方案。带有未解决承诺的方法有太多不明显的边缘情况(比如在处理拒绝时的bug)。我不确定你所说的“有效”是什么意思,但即使你修复了bug,也没有很好的理由使用它。我的意思是,它会导致一些技术问题,如泄漏或其他问题。是的,不解决承诺是有效的(见或)和(尽管)。但是,对于if
/else
分支问题,它不是一个有效的解决方案。@Whitecolor:“笨拙”是主观的,在我看来,永远无法解决的承诺是一个更笨拙的解决方案。但我们似乎不同意这一点。或者可能您还没有很好地展示您的实际用例。