javascript - 以功能评估为条件抢占 promise

标签 javascript angularjs

我有一个类似的问题:How do I wait for a promise to finish before returning the variable of a function?

我有一个函数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'");
}

因为它等待 promise (关闭模式),所以它返回 false 并触发警报,而不等待模式关闭并实际触发 true

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

谢谢!

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

pass(form).then(function(result){
if(result)
{

这样做的问题是,如果将参数传递给不需要等待模态的 pass() ,我会得到一个未定义的 promise 。

TypeError: Cannot read property 'then' of undefined

最佳答案

自从您编辑以来,听起来pass有时会返回一个 promise 。仅供引用,将来, pass 的完整代码将会很有帮助,特别是围绕它返回的内容 - 您发布的代码实际上没有显示任何关于 pass 返回的内容,因为“return true”实际上并不是 pass 本身返回的内容。

您需要确保 pass 始终在每个代码路径中返回一个 promise 。如果模态不是必需的,并且您有一个同步返回值,请使 pass return Promise.resolve(true); - 即 true 值,但是包装为 Promise,因此 pass 的返回值始终可用。这样,pass 的调用者不需要知道或关心操作是同步完成还是异步完成。

关于javascript - 以功能评估为条件抢占 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44864661/

相关文章:

javascript - 基于另一个 JSON 格式的 JavaScript 对象更新

javascript - AngularJS - 表单自定义验证 - 检查是否至少填写了一个输入

javascript - ReactDOM.render 不渲染任何东西

javascript - 如何使用angular js中的值获取范围数组的索引

javascript - AngularJS 使用 resolve 验证多条路由

javascript - 使用附加时删除引号或包含引号

javascript - 更改 ng-options 列表时 ng-init 不工作

javascript - 答案或评论链接如何工作(stackoverflow,维基百科)?

javascript - JS 草案 - 提及 - 插件产生此 : Warning: React does not recognize the isFocused prop on a DOM element

javascript - 将 React 组件存储在父组件的状态中可以吗?