Javascript 有条件的功能评估优先于承诺

Javascript 有条件的功能评估优先于承诺,javascript,angularjs,Javascript,Angularjs,我有一个类似的问题: 我有一个函数pass,它执行一些表单验证。作为其中的一部分,它有时会打开一个模式,用户在返回值之前必须关闭该模式,如下所示: if ($scope.model.validation == "No") { $scope.modalInstance = $uibModal.open({ animation: true, templateUrl: 'pleaseval.html', controller: 'PleaseValCtrl', si

我有一个类似的问题:

我有一个函数pass,它执行一些表单验证。作为其中的一部分,它有时会打开一个模式,用户在返回值之前必须关闭该模式,如下所示:

if ($scope.model.validation == "No") {
  $scope.modalInstance = $uibModal.open({
    animation: true,
    templateUrl: 'pleaseval.html',
    controller: 'PleaseValCtrl',
    size: 'lg'
  }).closed.then(function() {
    return true;
  });
}
注意,直到模态关闭,它才返回true

但是,我有一个基于函数求值的条件

if(pass(form))
{
//some code here
}
else{
alert("Please fill out all the required information before hitting 'Next'");
}
因为它等待模式关闭承诺,所以返回false并触发警报,而不等待模式关闭并实际触发true

如何构造此代码,以便在等待模式关闭时不触发警报

谢谢大家!

编辑:我应该注意,我可以这样做:

pass(form).then(function(result){
if(result)
{
这样做的问题是,如果参数被传递到pass,而不需要等待模态,那么我会得到一个未定义的承诺

TypeError:无法读取未定义的属性“then”


由于您的编辑,它听起来像通过有时返回一个承诺。仅供参考,在未来,pass的完整代码将非常有用,尤其是关于它返回的内容-您发布的代码实际上没有显示pass返回的内容,因为返回true实际上不是pass本身返回的内容


您需要确保pass始终在每个代码路径中返回承诺。如果模态不是必需的,并且您有一个同步返回值,则将pass return Promise.resolvettrue;-也就是说,值为true,但包装为承诺,因此pass的返回值始终为true。这样,pass的调用方就不需要知道或关心操作是同步完成还是异步完成。

Promise.resolvettrue;对于ifresult部分不激发true。。。我必须传递额外的参数吗?@SummerDeveloper发布了传递的完整代码,或者至少是处理流控制承诺、if/else、return等的每个部分。它实际上是有效的,它只是打破了一些令人困惑的东西,但我相信超出了这个问题的范围。你能解释一下为什么你在这里使用承诺吗?是否通过长时间运行的验证后端过程?如果您只是在运行客户端验证,那么坚持同步调用就可以了。