我知道這個問題已經在某種程度上得到了回答,但我無法讓我的東西工作。如何在循環內處理異步調用?
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.");
});
我想從特定線程獲取所有消息,並且一旦找到我正在嘗試獲取用戶相同的詳細信息。 問題是在循環中,我得到的線程和調用用戶服務,到執行用戶服務時索引移動到最後一個計數,因此我的代碼被破壞。
reverseMessage[i].sender_name
說 「reverseMessage [I]」 未定義,因爲我已經移動到最後的位置在陣列。 [如果長度20,然後我= 20,沒有可用的數據] 幫助表示讚賞!
當你說_「這個問題已經回答了以某種方式」 _,看看[** **這裏(http://stackoverflow.com/questions/13343340/calling-你是對的一個異步函數內的循環在JavaScript)和[**這裏**](http://stackoverflow.com/questions/11488014/asynchronous-process-inside-a-javascript- for循環)。 – Rohit416
我在談論角度承諾。不推薦使用直接回調方法 – Anand
這是你的選擇,Angular是幕後的JavaScript,所以你可以在JS中思考的任何東西都可以工作。我的建議是使用閉包。 – Rohit416