私はこの質問が既にどこかで答えられていることは知っていますが、私のものを働かせることはできません。ループ内で非同期呼び出しを処理する方法は?
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の場合、i = 20でデータがありません] ヘルプがありがとうございます!
あなたは_ _「この質問はすでに何らかの方法で答えている」と言うとき、見とる権利です[**をこちら**](http://stackoverflow.com/questions/13343340/calling-ループ内の非同期関数)と[**ここ**](http://stackoverflow.com/questions/11488014/asynchronous-process-inside-a-javascript- forループ)。 – Rohit416
私はAngular promiseについて話しています。ダイレクトコールバックの使用は推奨されていません – Anand
これはあなたの選択です。AngularはJavaScriptの背後にあるので、JSで考えることができるものはすべて動作します。私の提案はクロージャを使用することです。 – Rohit416