我有一个控制器,我可以允许除一个函数之外的所有东西(让我们称之为itOneFunction())以异步方式运行。原因是,OneFunction()依赖大约10个promises来解决,否则它不需要执行它所需的范围内的数据。
我在网上看到过多个关于如何具体获取个人获取/查询/服务承诺的例子,但我没有看到的是一种检查所有承诺一下子被解决的方法 - 也许是凭借一个Angular我不知道的状态变量?类似的东西:
var currentPromises = $state.promises;
currentPromises.then(thatOneFunction());
或者如果还没有内置变量,那么有一种方法可以动态生成当前时刻未完成的所有承诺列表,然后我可以使用.then()?它会有很大帮助,因为我在这个应用程序中有很多具有这种结构的页面。
我尝试/目前正在做什么“ 截至目前我有一个解决方案,但它需要一些硬编码,我宁愿不继续。它基于插入对函数的调用,该函数检查计数器已调用该函数的次数,将其与已经调用该函数的promises数量进行比较(在计算控制器中的promises之后进行硬编码)以及是否已经完成所有必需的承诺,然后调用thatOneFunction()。
感谢您提供任何帮助/指示。
我的代码的示例位(实名/变量已更改):
控制器
$scope.runAfterAllPromises = function() {
*code dependedent on all promises here*
}
MySvc.loadList(function (results) {
$scope.myList = results;
});
$scope.runAfterAllPromises();
服务
app.service("MySvc", ['$resource', function ($resource) {
this.loadList = function (callBackFunction) {
var stateRes = $resource('/api/ListApi');
stateRes.query(function (ListResults) {
if (callBackFunction && typeof (callBackFunction) === 'function') {
callBackFunction(ListResults)
};
})
答案 0 :(得分:2)
如果有帮助,你可以链接承诺吗?
这样的事情:
var promises = [];
promises.push(yourPromise1());
promises.push(yourPromise2());
promises.push(yourPromise3());
$q.all(promises).then(function(){ ...});
这是什么意思?
答案 1 :(得分:0)
简短回答:不,不存在这样的对象。
现在,如何实现您想要实现的目标:
var allPromise = $q.all([promise1, promise2, promiseN]);
allPromise.then(success).catch(error);
编辑:在你的“一个人可以梦想评论”后,我想补充一点:
您可以覆盖$ q.defer函数,并跟踪创建的所有延迟对象,并获得它们的承诺。
显然,这可能会产生一些延迟创建的问题,但从未解决过,但这可能是实现所需功能的最简单方法。如果你想要全力以赴,你可以看看角度装饰器,它提供了扩展角度提供者的功能框架