如何根据promise的结果返回布尔值?
How do you return a boolean value based on the result of a promise?
使用AngularJS应用程序(1.4.3),我希望控制器调用服务上的方法,该方法应该返回一个布尔值。
在底层,该服务用于调用$window.confirm(),然后返回结果。我试图切换实现使用Angular Material的$mdDialog.confirm() API,但这返回一个承诺。
我遇到的问题是,没有办法直接从我的服务返回true或false,而不改变我的控制器中的代码来期望一个承诺。将此方法提取到服务中的全部目的是使控制器可以从调用的实现细节中分离出来,并且我会考虑使用承诺(即,未来布尔值)而不是直接布尔值作为实现细节。
下面是一些代码来说明:在控制器中:function confirmDeleteDevice() {
if (notificationService.confirm('Are you sure you want to delete the device?')) {
deleteDevice();
}
}
'notificationService'中的旧函数:
function confirm(message) {
return $window.confirm(message);
}
notificationService中的新功能将不能与上面的控制器代码一起工作:
function confirm(message) {
var confirm = $mdDialog.confirm()
.title(message)
.ariaLabel(message)
.ok('Yes')
.cancel('No');
return $mdDialog.show(confirm).then(function() {
return true;
}, function() {
return false;
});
}
如果不更改控制器代码以依赖于使用承诺的实现细节,我如何从我的服务方法中获得布尔值?上面的代码将始终执行"deleteDevice()",因为新的notificationService.confirm()将返回未解析的承诺,这显然符合if子句的真值。
我绝对不是承诺方面的专家,我知道这并不是他们期望的使用方式,但我真的不想把控制器束缚在使用承诺上。考虑到承诺的"异步"特性,这可能吗?
更新:在我发布之前,我肯定看了一下,没有找到任何东西,但这只是出现在"相关问题"提要中,所以我现在看到我的问题是重复的。这里的答案非常有用。
你也必须使你的条件异步,链接到承诺。
即notificationService.confirm('...').then(function(confirmation){
if(confirmation) {
deleteDevice();
}
});
,你真的不需要有catch和return false
,除非你需要真正跟踪返回值,因为dialog已经根据cancel或Ok解决/拒绝了承诺,即下面的块不需要。
.then(function() {
return true;
}, function() {
return false;
});
function confirm(message) {
var confirm = $mdDialog.confirm()
.title(message)
.ariaLabel(message)
.ok('Yes')
.cancel('No');
return $mdDialog.show(confirm);
}
,只是:
notificationService.confirm('...').then(deleteDevice);
- webpack优化最小化返回布尔值,而不是工厂值
- 为什么这个对象方法不返回布尔值Javascript
- 循环返回布尔值
- 如何为窗体返回布尔值's”;onsubmit”;属性,这取决于ajax调用的成功与否
- 如果查询搜索包含元素,如何返回布尔值
- 在使用javax.script.ScriptEngine对象评估javaScript代码后返回布尔值
- 为什么Array.prototype.some返回布尔值
- 在Javascript中返回布尔值时.id与.className的比较
- 通过选择器检查对象是否存在,使用jQuery或Javascript返回布尔值
- 如何从确认对话框插件返回布尔值
- 为什么要!函数之前不返回布尔值相反的值
- 如何根据promise的结果返回布尔值?
- 如何声明一个javascript变量并将其值赋给一个返回布尔值的php文件
- 从函数返回布尔值
- Angular自定义过滤器只返回布尔值=== true的结果
- 编辑:为什么typeof(0)返回布尔值而不是数字?
- jQuery ';不返回布尔值
- 调用一个为ng-show返回布尔值的函数是个好主意吗
- 函数的目的只返回布尔值
- 为搜索的键/值对返回布尔值的最简单方法(Javascript)