编辑
第一个答案是一个很好的答案,但是,正如该问题和另一个关于stackoverflow的问题中多次提到的那样,问题是服务和控制器在数据实际到达之前就运行它们的东西。
(对第一个答案的最后评论:)
是的,问题在于服务运行后API调用完成,并将所有内容返回给控制器,请参阅此处screencast.com/t/uRKMZ1IgGpb7
…这是我的BASE问题,如何在所有部件上等待数据发送到到达?
这就像我重复说的那样, 在成功完成数据检索之后,我们如何提供服务来填充数组,而在发生所有这些情况后,控制器将获取数据
,因为正如您在我的屏幕快照中所看到的,事情在另一个地方运行订购。
我有以下代码:
var deferred = $q.defer();
$http.get('../wordpress/api/core/get_category_posts/?category_id=14 ').success(function(data) {
//we're emptying the array on every call
theData = [];
catName = data.category.slug;
theData = data;
theData.name = catName;
aggregatedData.push(theData);
});
$http.get('../wordpress/api/core/get_category_posts/?category_id=15 ').success(function(data) {
theData = [];
catName = data.category.slug;
theData = data;
theData.name = catName;
aggregatedData.push(theData);
});
$http.get('../wordpress/api/core/get_category_posts/?category_id=16 ').success(function(data) {
theData = [];
catName = data.category.slug;
theData = data;
theData.name = catName;
aggregatedData.push(theData);
});
$http.get('../wordpress/api/core/get_category_posts/?category_id=17 ').success(function(data) {
theData = [];
catName = data.category.slug;
theData = data;
theData.name = catName;
aggregatedData.push(theData);
});
//deferred.resolve(aggregatedData);
$timeout(function() {
deferred.resolve(aggregatedData);
}, 1000);
/*//deferred.reject('There is a connection problem.');
if (myservice._initialized) {
$rootScope.$broadcast('postsList', deferred.promise);
}*/
//myservice._initialized = true;
myservice = deferred.promise;
return deferred.promise;
对于我的一生,我无法理解为什么在传递结果数组以进行延迟时必须设置超时?
原则不应该是,延迟等待信息到来然后返回承诺吗?那那一秒钟的意义是什么?据我了解,defer应该能够等待API返回结果并返回承诺数据的时间。
我真的很困惑,在过去的两个小时里,我一直把头撞在墙上,因为我没有在控制器中收到任何数据,只有当我将超时时间放在那儿时。
恕我直言,我认为有很多聪明(优雅)的方法可以做到这一点$q.all
。
请看下面的代码。
我假设您想一次返回数据,并将所有结果汇总在一个大数组上。
var myApp = angular.module('myApp', []);
myApp.factory('myService', function ($http, $q) {
return {
getAllData: function () {
return $q.all([
$http.get('../wordpress/api/core/get_category_posts/?category_id=14'),
$http.get('../wordpress/api/core/get_category_posts/?category_id=15'),
$http.get('../wordpress/api/core/get_category_posts/?category_id=16'),
$http.get('../wordpress/api/core/get_category_posts/?category_id=17')
]).then(function (results) {
var aggregatedData = [];
angular.forEach(results, function (result) {
aggregatedData = aggregatedData.concat(result.data);
});
return aggregatedData;
});
}
};
});
您可以在上方看到aggregatedData
只有通过完成所有异步调用后,才会生成$q.all
。
例如,您只需要将该服务作为依赖项包含到您的一个控制器中,然后像这样调用该服务 myService.getAllData()
希望对您有所帮助,或者让我知道您是否需要一个完整的示例,我可以提供一个示例!:)
问题内容: 这是一些基于行为的简单问题,我在下面的示例中在节点上运行时注意到了这些行为: 输出为: 1)为什么要实现在立即对已知值运行回调之前等待?为什么不够智能,以至于第一行在第二行运行之前同步发布其输出? 2)什么是之间的时间流逝和被输出?它是单个进程滴答吗? 3)能否将绩效深深包裹在承诺中而产生绩效问题?例如,即使可以有效地同步解决,它是否也要异步等待3倍的时间才能完成? 问题答案: 这实际
Q-Learning 决策 假设我们的行为准则已经学习好了, 现在我们处于状态s1, 我在写作业, 我有两个行为 a1, a2, 分别是看电视和写作业, 根据我的经验, 在这种 s1 状态下, a2 写作业 带来的潜在奖励要比 a1 看电视高, 这里的潜在奖励我们可以用一个有关于 s 和 a 的 Q 表格代替, 在我的记忆Q表格中, Q(s1, a1)=-2 要小于 Q(s1, a2)=1, 所以
描述 (Description) 可以使用此函数代替单引号。 这不是一个真正的函数,更像是一个运算符,但如果你在另一个程序员的程序中看到它而不记住它是什么,你可能会看到这里。 您实际上可以使用任何一组分隔符,而不仅仅是括号。 语法 (Syntax) 以下是此函数的简单语法 - q ( string ) 返回值 (Return Value) 此函数返回单引号字符串。 例子 (Example) 以下
本文向大家介绍PrologCLP(Q),包括了PrologCLP(Q)的使用技巧和注意事项,需要的朋友参考一下 示例 CLP(Q)对有理数进行推理。 例:
1. Q&A
Kdb +带有内置的编程语言,即q 。 它包含标准SQL的超集,可扩展用于时间序列分析,并提供许多优于标准版本的优势。 熟悉SQL的人可以在几天内学习q并能够快速编写自己的即席查询。 启动“q”环境 要开始使用kdb +,您需要启动q会话。 启动q会话有三种方法 - 只需在运行终端上输入“c:/q/w32/q.exe”即可。 启动MS-DOS命令终端并键入q 。 将q.exe文件复制到“C:\Wi