我目前对angularjs的承诺概念是新的,并且发现我的自我陷入了异步金字塔。
情况是一个异步函数,它在成功时调用另一个异步函数2。一旦两个函数完全执行,所需的输出就是执行一些操作。
// Inside Controller
ServiceName.AsyncFunc1().then(function(){
alert("Complete");
})
// Inside Service
app.service('ServiceName', function ($http) {
return {
AsyncFunc1 : function()
{
var self = this;
return $http.post(url).
success(data)
{
self.AsyncFunc2();
}
},
AsyncFunc2 : function()
{
return $http.post(url2).
success(data)
{
alert("AsyncFunc2 Complete");
}
},
}
});
现在,我想在两个顺序异步调用完成时调用alert(“Complete”)。 但目前我在警报之前有警报(“完成”)(“AsyncFunc2 Complete”);
答案 0 :(得分:0)
如果您希望在两个函数都返回承诺时发出警报消息,那么您可以使用$q.all
$q.all
需要一系列承诺。
实施例
$q.all([function1(), function2()])
修改的 好!就是这种情况,那么你可以在第二个顺序函数解决后再使用。根据你的解释,这就是我的理解。
(function(){
angular
.module('myApp')
.controller('MyController', MyController);
function MyController(myService) {
function secondASyncSuccess() {
alert("second function is done");
}
function firstFuncSuccess() {
alert("First func is done");
myService.secondASyncFunction()
.then(secondASyncSuccess, secondASyncFailure);
}
myService.firstASyncFunction()
.then(firstFuncSuccess, firstFuncFailure);
}
})();