【发布时间】:2016-10-25 18:22:12
【问题描述】:
我知道这个问题已经以某种方式得到解答,但我无法让我的东西正常工作。
YammerFunctionality.getMessagesInThread(msg.id,$scope.older_ID).then(function(response){
var obj=response.data.messages;
var messages=[];
var reverseMessage=obj.reverse();
var promises=[];
for(var i=0;i<reverseMessage.length;i++){
var deferred = $q.defer();
promises.push(deferred.promise);
if(reverseMessage[i].replied_to_id) {
YammerFunctionality.getUserInfo(reverseMessage[i].sender_id).then(function(response){
reverseMessage[i].sender_name=response.data.full_name;
messages.push(reverseMessage[i]);
deferred.resolve();
},function(error){
deferred.reject(error);
});
}
}
$q.all(promises).then(function () {
console.info('All resolved');
$state.go('yammermessage',{messages:messages});
},function(){
showAlert("Thread error");
});
},function(error){
showAlert("Yammer Error while opening Thread.");
});
我正在尝试从特定线程获取所有消息,一旦发现我正在尝试获取相同的用户详细信息。 问题出在我获取线程并调用用户服务的 for 循环中,到执行用户服务时,索引移动到最后一个计数,因此我的代码被破坏了。
reverseMessage[i].sender_name
说“reverseMessage[i]”是未定义的,因为 i 已移动到数组中的最后一个位置。 [如果长度为 20,则 i=20 且无可用数据] 感谢您的帮助!
【问题讨论】:
-
我说的是 Angular 承诺。不推荐使用直接回调的方法
-
那是你的选择,Angular 是幕后的 JavaScript,所以你可以在 JS 中想到的任何东西都可以工作。我的建议是使用闭包。
标签: javascript arrays angularjs for-loop arraylist