例如,假设我需要在收到两个事件"eventA"和"eventB"后运行一个函数.我通常做的是为每个事件声明一个布尔变量,在接收到事件时将变量设置为true,并询问另一个变量是否为true来运行该函数:
var a = false,
b = false;
$scope.$on("eventA", function(){
a = true;
if (b)
performTask();
});
$scope.$on("eventB", function(){
b = true;
if (a)
performTask();
});
var performTask = function() {
/* do something... */
};
Run Code Online (Sandbox Code Playgroud)
如果有三个或更多事件,这会变得更复杂.是否有设计模式来处理这些情况?
您可以使用 $q 承诺。
var dfdATask= $q.defer();
var dfdBTask= $q.defer();
$scope.$on("eventA", function(){
// whatever this function does
dfdATask.resolve(true);//or pass a value
});
$scope.$on("eventB", function(){
//whatever this function does
dfdBTask.resolve(true);//or pass a value
});
$q.all([dfdATask.promise, dfdBTask.promise]).then(function(){
//be sure to pass in an array of promises
//perform task
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1214 次 |
| 最近记录: |