完成时的 Foreach 回调[重复]
Posted
技术标签:
【中文标题】完成时的 Foreach 回调[重复]【英文标题】:Foreach callback when finish [duplicate] 【发布时间】:2015-09-20 12:03:20 【问题描述】:我想在foreach
完成后执行回调,但它不能正常工作。我该怎么做?
var response = [];
myArray.forEach(function(data)
data.asyncFunction(function(result)
response.push(result);
);
, function()
console.log(response); // Not being called.
);
console.log(response); // (Empty) Executed before foreach finish.
【问题讨论】:
您是否在forEach
中执行任何异步操作?
"//(空)在 foreach 完成之前执行。" 不正确的假设。 forEach 实际上是完整的。你误诊了问题。请为您的问题提供更多背景信息。
@thefourtheye 我编辑了因为我在我的 foreach 中使用了一个异步函数。
【参考方案1】:
试试这个:
myArray.forEach(function(element, index, array)
asynchronous(function(data)
if (index === myArray.length - 1)
response.push(data);
functionAfterForEach();
)
);
【讨论】:
myArray
没有改变......所以每当你要求它的长度时,它都会给出正确的长度@Kevin B
评论当然是对您答案的原始迭代。不过,我认为它仍然存在。如果循环的最后一次迭代完成了除最后一次之外的任何事情,那么您将很快调用回调。
对不起@Kevin B 这对我来说是个愚蠢的错误
抱歉,请参阅编辑评论。我有一个坏习惯,在我完成之前点击进入 cmets。 :)【参考方案2】:
因为forEach
只接受一个callback
。由于您在forEach
内部调用异步方法,您需要检查所有异步调用是否已完成
var response = [];
myArray.forEach(function(data, index)
data.asyncFunction(function(result)
response.push(result);
if(response.length === myArray.length)
//foreach work done
);
);
【讨论】:
我编辑了我的问题,因为我在 foreach 中使用了异步函数。你能看看吗?谢谢。 如果它真的是异步的,你不能相信当最后一个索引被调用时它们都已经完成了。最好将 myArray.length 与 response.length 进行比较。 @Anoop 谢谢大家,我明白了!对于这个愚蠢的问题,我们深表歉意。 @LucianoNascimento 这不是愚蠢的问题。它发生在每个人身上 您也可以使用简单的整数变量并与 myArray.length 进行比较(例如:if( itemsProcessed === myArray.length )
)以上是关于完成时的 Foreach 回调[重复]的主要内容,如果未能解决你的问题,请参考以下文章