同步函数中的承诺永远不会解决

Promise inside a sync function never resolves

当异步函数中的 promise 函数永远不会解析或拒绝时会发生什么,所以在下面的保存方法中,如果两个初始条件都不满足,将会发生什么,它不会给出错误,它会永远等待直到收到响应吗?

save().then(results=>{

})

save():promise<any>{
  if (conditionA) {
    return http request
  }
  if (conditonB) {
    return http request}
  }
}

如果您的承诺有时 return 是一个承诺,那么它应该总是 return 一个承诺。如果您发现在某些代码路径中不需要承诺 return,通常的设计模式是您只需执行 return Promise.resolve()。所以,保持你的 pseudo-code,你会做这样的事情:

save().then(results=>{

})

save():promise<any>{
  if (conditionA) {
    return request(...);
  } else if (conditonB) {
    return request(...);
  } else {
    return Promise.resolve(...);
  }
}

您填写上面的 ... 部分以使您的函数有意义。但是,如果您有时 return 承诺,那么总是 return 承诺。然后,调用者可以始终如一地使用 returned 承诺。如果工作已经完成(或者没有什么可做的),那么你只是 return 一个已经解决的承诺,调用者总是得到一个一致的 return 值,他们可以将其用作承诺。


请注意,none 与您的问题标题相匹配,但它与您问题的 body 完全匹配。您的标题是不是错了,或者您的问题描述中是否缺少某些部分?

一个简单的答案应该是,如果从包括服务调用(http 调用)在内的方法返回任何类型的承诺,save() 不能是未定义的, 如果它永远不会解决,它将永远不会进入处理程序的 then 部分,但它不能给出未定义的错误。 当 if else 条件中没有条件满足且没有 returns.

时,可以给出未定义的错误