我有3个函数$ scope.one(); $ scope.two(); $ scope.three();
我想:
当一个人完成后,两个人就会执行,
当两个完成时,则会执行三个。
我在谷歌搜索,这可以通过延期处理,但我不知道如何做到这一点。我没有找到清晰简单的解释。
更新
$scope.login = function(){
$http.post(URL+'auth/login', {email:'dummy@gmail.com', password:'password'}).then(function(response){
console.log(response.data);
});
};
$scope.getData = function(){
IngredientService.ingredients().then(function (response) {
console.log(response.data);
});
};
答案 0 :(得分:0)
要回答您的问题,对于执行订单问题,您可以执行以下操作 - 提供所有函数返回承诺。
$scope.one()
.then($scope.two)
.then($scope.three);
前切线。
然而,这可能表明存在设计缺陷。一般来说,可能不希望公开在范围级别返回promises的函数 - 范围主要用于与视图交谈,并且视图不能使用promises。您可能想要将$scope.one
,$scope.two
和$scope.three
中的所有逻辑移动到服务,然后在单个函数内部调用链。
现在,如果要将API公开给作用域的后代,则应该使用控制器并通过指令进行通信。这也是Angular 2.0中实际使用的,完全删除了作用域和控制器 - 我们将拥有的所有指令基本上都有一个控制器,并且可能需要其他指令。
const mod = angular.module('app', []);
class ParentCtrl {
foo() {
console.log('it works!');
}
}
mod.directive('parent', function() {
return {
controller: ParentCtrl
};
});
mod.directive('child', function() {
return {
require: ['^parent'],
link: function($scope, $element, $attrs, $ctrl) {
$scope.parent = $ctrl;
},
controller: function($scope) {
// Unfortunately this is the only way to access required controllers from this controller at the moment. However, one could argue that shared logic should *really* go in services, and that the only thing required controllers should be used for is event binding (in the link function).
$scope.parent.foo();
}
};
});
当您公开这样的API时,有时会在此级别公开承诺。有关示例,请参阅我的codepen(查看控制台)。
答案 1 :(得分:-1)
我建议你使用异步模块。特别是瀑布功能,符合您的要求。
https://github.com/caolan/async
<强> [编辑] 强>
您可以使用async执行此操作:
$scope.login = function(callback) {
if (success) {
callback();
} else {
callback('my error');
}
}
$scope.getData = function(callback) {
callback(null, myData);
}
$scope.doIt = function(callback) {
async.waterfall([$scope.login, $scope.getData], callback);
}