Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用未解析的承诺进行条件筛选/分支_Javascript_Promise - Fatal编程技术网

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:“笨拙”是主观的,在我看来,永远无法解决的承诺是一个更笨拙的解决方案。但我们似乎不同意这一点。或者可能您还没有很好地展示您的实际用例。