Angular 是否有一个包含所有当前承诺的预定义对象?
Does Angular have a predefined object that houses all current promises?
我有一个控制器,我可以在其中允许除一个函数(我们称之为 thatOneFunction() )之外的所有内容异步 运行。这样做的原因是 thatOneFunction() 依赖于大约 10 个已解决的承诺,否则它没有需要执行的范围内的数据。
我在网上看到了多个关于如何具体获取个人承诺的示例 gets/queries/services 但我还没有看到一种方法来检查所有承诺是否已立即得到解决 - 也许是凭借一个我不知道的 Angular 状态变量?类似于:
var currentPromises = $state.promises;
currentPromises.then(thatOneFunction());
或者,如果还没有内置变量,是否有办法动态生成当前所有未完成承诺的列表,然后我可以使用 .then()?这会很有帮助,因为我将在这个应用程序中有很多页面具有这种结构。
我tried/am目前正在做的事情"
截至目前,我有一个解决方法,但它需要一些我不想继续的硬编码。它基于插入对函数的调用,该函数检查该函数被调用次数的计数器,将其与应该已经调用该函数的承诺数进行比较(在计算控制器中的承诺后进行硬编码)以及是否它已经完成所有必需的承诺,然后调用 thatOneFunction()。
感谢任何help/pointers。
我的代码示例(实际 names/variables 已更改):
控制器
$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)
};
})
你可以连锁承诺,如果有帮助的话?
所以像这样:
var promises = [];
promises.push(yourPromise1());
promises.push(yourPromise2());
promises.push(yourPromise3());
$q.all(promises).then(function(){ ...});
这是什么意思?
简答:不,不存在这样的对象。
现在,如何实现你想要的:
var allPromise = $q.all([promise1, promise2, promiseN]);
allPromise.then(success).catch(error);
编辑:在你的"A man can dream comment"之后我想添加这个:
您可以覆盖 $q.defer 函数,并跟踪创建的所有延迟对象,并获得它们的承诺。
显然,这可能会导致创建延迟的一些问题,但从未解决等问题,但这可能是实现所需功能的最简单方法。如果你想走完整个路,你可以看看 angular 装饰器,它提供了一个功能框架来扩展 angular providers
我有一个控制器,我可以在其中允许除一个函数(我们称之为 thatOneFunction() )之外的所有内容异步 运行。这样做的原因是 thatOneFunction() 依赖于大约 10 个已解决的承诺,否则它没有需要执行的范围内的数据。
我在网上看到了多个关于如何具体获取个人承诺的示例 gets/queries/services 但我还没有看到一种方法来检查所有承诺是否已立即得到解决 - 也许是凭借一个我不知道的 Angular 状态变量?类似于:
var currentPromises = $state.promises;
currentPromises.then(thatOneFunction());
或者,如果还没有内置变量,是否有办法动态生成当前所有未完成承诺的列表,然后我可以使用 .then()?这会很有帮助,因为我将在这个应用程序中有很多页面具有这种结构。
我tried/am目前正在做的事情" 截至目前,我有一个解决方法,但它需要一些我不想继续的硬编码。它基于插入对函数的调用,该函数检查该函数被调用次数的计数器,将其与应该已经调用该函数的承诺数进行比较(在计算控制器中的承诺后进行硬编码)以及是否它已经完成所有必需的承诺,然后调用 thatOneFunction()。
感谢任何help/pointers。
我的代码示例(实际 names/variables 已更改):
控制器
$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)
};
})
你可以连锁承诺,如果有帮助的话?
所以像这样:
var promises = [];
promises.push(yourPromise1());
promises.push(yourPromise2());
promises.push(yourPromise3());
$q.all(promises).then(function(){ ...});
这是什么意思?
简答:不,不存在这样的对象。
现在,如何实现你想要的:
var allPromise = $q.all([promise1, promise2, promiseN]);
allPromise.then(success).catch(error);
编辑:在你的"A man can dream comment"之后我想添加这个:
您可以覆盖 $q.defer 函数,并跟踪创建的所有延迟对象,并获得它们的承诺。
显然,这可能会导致创建延迟的一些问题,但从未解决等问题,但这可能是实现所需功能的最简单方法。如果你想走完整个路,你可以看看 angular 装饰器,它提供了一个功能框架来扩展 angular providers