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

Asynchronous 同步函数中的承诺永远不会解析,asynchronous,promise,resolve,Asynchronous,Promise,Resolve,当异步函数中的promise函数从未解析或拒绝时会发生什么,所以在下面的save方法中,如果两个初始条件都不满足,将会发生什么,它不会给出错误,它会永远在那里等待,直到收到响应吗 save().then(results=>{ }) save():promise<any>{ if (conditionA) { return http request } if (conditonB) { return http request} } } sav

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

save().then(results=>{

})

save():promise<any>{
  if (conditionA) {
    return http request
  }
  if (conditonB) {
    return http request}
  }
}
save()。然后(结果=>{
})
save():承诺{
如果(条件A){
返回http请求
}
如果(条件nb){
返回http请求}
}
}

如果您的承诺有时会返回一个承诺,那么它应该始终返回一个承诺。如果您发现在某些代码路径中不需要承诺返回,通常的设计模式是只执行
返回承诺.resolve()
。因此,请继续使用伪代码,您可以执行以下操作:

save().then(results=>{

})

save():promise<any>{
  if (conditionA) {
    return request(...);
  } else if (conditonB) {
    return request(...);
  } else {
    return Promise.resolve(...);
  }
}
save()。然后(结果=>{
})
save():承诺{
如果(条件A){
返回请求(…);
}否则,如果(条件nb){
返回请求(…);
}否则{
回报承诺。解决(…);
}
}
您可以填写上面的
部分,以了解您的功能。但是,如果你有时回报一个承诺,那就永远回报一个承诺。然后,调用方可以始终使用返回的承诺。如果工作已经完成(或者没有什么要做),那么您只需返回一个已经解析的承诺,调用者总是会得到一个一致的返回值,他们可以将其用作承诺



请注意,这些都与问题的标题不匹配,但与问题的主体完全匹配。您的标题是错误的还是缺少部分问题描述?

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

这并不意味着存在一个永远无法解决的承诺,它只是意味着您的函数根本不创建承诺,并且
。然后()
在调用
未定义的
时引发异常。不要这样做。是的,目前我正在修复与此相关的旧代码的错误,这表明无法调用undefined的,这就是为什么我想确定这是否是我在评论中提到的问题AK you@jfriend00,我正在修复现有代码中的一些错误,它说“then of undefined error”正在发生,我认为,因为没有其他东西,承诺也没有解决,所以错误发生了,但在回复评论中,我理解这是承诺没有创建,也不是一个案例resolving@Heshan-为了不让后面的人感到困惑,我建议您使用“编辑”在你的问题下链接并修改你问题的标题,以更好地适应这里发生的事情。