【发布时间】:2019-03-26 18:17:40
【问题描述】:
我有一个集群数组,其中每个集群都包含一组特征。我使用两个 forEach 语句来遍历集群和特征,以便将每个特征存储在我的“结果”数组中。
我需要进一步处理我的“结果”数组。但是当我询问数组的长度时,它说长度为 0,尽管我可以在控制台中看到其中有一些特性。我需要找到一种仅在 forEach 循环完成时处理“结果”数组的方法。
我已经读到这个问题是由 JavaScript 中的异步数据处理引起的。我已经尝试注册一个 Promise,但我无法让它工作,因为在示例中总是使用一个 forEach 循环,但我有两个 forEach 循环。
这是我的代码:
var result = [];
clusters.forEach((cluster) => {
getFeatures(cluster_id, (features) => {
features.forEach((feature) => {
result.push(feature);
});
});
});
//do something with result array
console.log("resulting features array length: " + result.length); //results in 0
【问题讨论】:
-
请点击edit然后点击
[<>]stacksn-p编辑器并生成minimal reproducible example -
信息不足 - 请同时发布
getFeatures()实现,就像cluster一样 -
我猜
getFeatures()是异步的,类似于服务器请求?在这种情况下,您的console.log()将在 http 请求被解析之前执行 -
请告诉我们你是如何尝试使用承诺的。
-
getFeatures() 很可能是一个 http 请求,因为特征是从地图中呈现的。明天我会提供更多信息和 stacksn-p!
标签: javascript arrays asynchronous foreach