我正在做的是链接各种异步任务,这些异步任务依赖于前面的响应,最终得到一个包含所有响应的对象数组,以包含$scope
中使用的所有响应。我使用的是Angular
和MongoDB
。
因此,我有多个Url
与使用User
模型的特定UserUrl
相关联。每个Url
也与使用Group
模型的GroupUrl
相关联。 客户端会看到Groups
列表,但列表中的每个项目都会显示UserUrl
和属于每个GroupUrl
的{{1}}的数据。 < / p>
为此,我使用的是Group
和promises
。
首先我得到所有Broadcast Service
:
UserUrls
Foreach allUrlByUser( $scope.user )
.then( function(userUrls){
angular.forEach( userUrls, function(userUrl){
allUrlById(userUrl);
});
});
我解决了Userurl
本身:
Url
发出的消息的观察者是:
allUrlById = function( userUrl )
{
return ajaxService
.api( 'allUrlById',userUrl.url )
.then( function( url )
{
var wrap = {
url : url[0],
userUrl: userUrl
};
/*
Emit message passing a object response built
using previous and current async data.
*/
Messenger.call(Messenger.allUrlById,
wrap);
});
回调函数是:
$scope.$on(Messenger.allUrlById, function(e,msg) {
return allGroupUrlById(msg);
});
考虑到我需要一个混合多个异步任务数据的最终包装对象数组:
答案 0 :(得分:0)
您不需要广播服务,承诺就足够了:
allUrlByUser( $scope.user ).then(function(userUrls){
angular.forEach( userUrls, function(userUrl){
allUrlById(userUrl).then(function(result) {
allGroupUrlById(result);
});
});
});
allUrlById = function( userUrl ) {
return ajaxService
.api( 'allUrlById',userUrl.url )
.then( function( url ) {
return {
url : url[0],
userUrl: userUrl
};
});
}
allGroupUrlById = function(result) {
return ajaxService
.api( 'allGroupUrlById', result.url._id )
.then( function( groupUrl ) {
var wrap = {
url : result.url,
userUrl: result.userUrl,
group : groupUrl[0].group
};
$scope.groups.push(wrap);
});
}