我有一个类似的问题: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/