gpt4 book ai didi

javascript - 如何处理循环内的异步调用?

转载 作者:行者123 更新时间:2023-11-28 05:52:12 26 4
gpt4 key购买 nike

我知道这个问题已经以某种方式得到解答,但我无法让我的东西正常工作。

  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 并且没有可用数据]感谢帮助!

最佳答案

你不能在你的promise中使用变量i。您需要创建一个闭包函数并将变量传递给该函数。尝试下面的代码。

 for(var i=0;i<reverseMessage.length;i++){
var deferred = $q.defer();
promises.push(deferred.promise);
function closure(i){
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);
});
}
}
closure(i);
}

关于javascript - 如何处理循环内的异步调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37991240/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com