【发布时间】:2022-01-12 17:41:59
【问题描述】:
我需要遍历一个 Map 对象 - 使其真实 - 可以说它是一个 多边形集合(多边形由坐标集合表示 - 纬度和经度)。 地图中的每个项目都有一个项目集合(坐标)。 对于地图(多边形)中的每个项目(坐标),我需要执行一些返回 Promise 的异步操作。在完成承诺(返回一个字符串)集合之后 - 我想将它推入一个带有前面单词“POLYGON ...”的数组中。 随着所有这一切的结束(在地图上的迭代) - 我有一个“多边形”数组及其坐标。 然后我想用这个数组做点什么。 问题是 Map 迭代结束时没有考虑其中的承诺,这意味着 - 当迭代完成时,应该由迭代中的承诺填充的数组是未定义的。 查看我的代码:
//Polygons is the Map object
let polygonsarray : [] = []
let strPolygonArray : string;
for (let [key, value] of this.Polygons.items.entries())
{
if (value.PolygonItem)
{
Promise.all(value.PolygonItem.map(p =>
{
return someAsychActionThatReturnPromise(p).then(res => res)
})).then(data =>
{
polygonsarray.push("POLYGON(" + data + ")"));
}).catch(err => return throwError(err));
}
}
//polygonsarray is still empty in this stage
strPolygonArray = polygonsarray.join();
【问题讨论】:
-
How do I ask a good question?: "描述问题。“它不起作用”的描述不足以帮助人们理解你的问题。相反,告诉其他人读者预期的行为应该是什么。告诉其他读者错误消息的确切措辞是什么,以及产生它的代码行。"
-
@Andreas - 抱歉 - 类型错误 - 我的意思是多边形数组。我修好了。
-
polygonsarray不是undefined。您在该变量中存储一个空数组。它“只”是空的。 -
您不是在等待
Promise.all().then承诺得到解决。您只需将打印作为同步执行代码的一部分。
标签: angular typescript asynchronous promise rxjs