【发布时间】:2026-02-24 21:40:02
【问题描述】:
目标
我正在做的是链接各种异步任务,这些任务依赖于先前任务的响应,以最终获得一个对象数组,这些对象包含要在$scope 中使用的所有响应。我正在使用Angular 和MongoDB。
逻辑
所以,我有多个 Url 使用 UserUrl 模型关联到特定的 User。每个Url 也使用GroupUrl 模型与Group 相关联。 客户端将看到Groups 的列表,但列表中的每个项目都显示UserUrl 的数据以及属于每个Group 的GroupUrl。
为此,我使用promises 和Broadcast Service。
首先我得到所有UserUrls:
allUrlByUser( $scope.user )
.then( function(userUrls){
angular.forEach( userUrls, function(userUrl){
allUrlById(userUrl);
});
});
Foreach 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);
});
而回调函数是:
allGroupUrlById = function( msg )
{
return ajaxService
.api( 'allGroupUrlById', msg.response.url._id )
.then( function( groupUrl )
{
var wrap = {
url : msg.response.url,
userUrl: msg.response.userUrl,
group : groupUrl[0].group
};
$scope.groups.push(wrap);
});
}
问题
考虑到我需要一个最终的包装对象数组,混合多个异步任务的数据:
- 这是一种适当/可接受的方式吗?
- 您认为这种技术是否足以处理大量查询?
- 有什么建议吗?
【问题讨论】:
-
但 $q.all 不是假设我们事先拥有所有必需的选项值吗?我的意思是,我有 3 个异步任务,第二个需要第一个的结果,第三个需要第二个.. $q.all 在这种情况下仍然可以使用吗?
-
是的,虽然不是必需的。
标签: angularjs asynchronous promise broadcast ionic-framework