【发布时间】:2014-12-22 15:45:40
【问题描述】:
根据AngularJS validation and promises 的建议,我想链接确认对话框,从而一次验证几个步骤。
根据用户提供的数据,进行 API 调用以查看所有需要用户确认的内容。 对于每个需要确认的步骤,提示用户并让他们决定是否进行下一步。 如果任何步骤返回 false,则整个链应返回 false。
我已经阅读了很多关于异步 JS 和 Promise 的内容,但我不得不承认我对它还是很陌生。 如何正确链接这些以获得所有步骤的最终真/假?请注意,需要 API 调用来根据提供的信息确定需要向用户显示的所有内容,因此 fetchSomeData() 作为链中的第一个调用。
任何帮助或建议将不胜感激。
fetchSomeData = function() {
var deferred = $q.defer();
api.fetchData(param1, param2, param3)
.then(function(data) {
deferred.resolve(data.content);
}, api.errorHandler);
return deferred.promise;
}
// data = {condition1: false, condition2: true, condition3: true}
// display confirmation dialogs for step 2 and step 3, not step 1
confirmStep1 = function(data) {
if (data.condition1) {
return confirmDialogService.popConfirm('step1').then(function(confirmed) {
return confirmed;
}, function() {
return false;
});
} else {
return $q.when(true);
}
}
confirmStep2 = function(data) {
if (data.condition2) {
return confirmDialogService.popConfirm('step2').then(function(confirmed) {
return confirmed;
}, function() {
return false;
});
} else {
return $q.when(true);
}
}
confirmStep3 = function(data) {
if (data.condition3) {
return confirmDialogService.popConfirm('step3').then(function(confirmed) {
return confirmed;
}, function() {
return false;
});
} else {
return $q.when(true);
}
}
confirmSteps = function() {
return fetchSomeData()
.then(confirmStep1(data))
.then(confirmStep2(data))
.then(confirmStep3(data));
}
confirmSteps().then(function(allConfirmed) {
if (allConfirmed == true) {
doSomething();
} else {
return;
}
});
【问题讨论】:
-
您是否忘记添加问题?
-
@KevinB 已编辑,感谢提醒。
标签: javascript angularjs promise angular-promise