我有几个地图功能可以准备我需要的数据。然后我使用这些数据运行一行代码。现在的问题是,最后一行执行两次。在地图功能之前和地图功能完成之后。我需要在地图完成后运行它。这是一个例子:
// Initial declaration of the array
let countryColumns = [
{
name : 'abc'
}
];
// I modify the array in the map functions
committees.map((committee) => {
countryColumns.push({
name: 'cba'
});
});
countries.map((country) => {
countryColumns.push({
name: 'foo'
});
});
// Then I load the view using those data with this line of code. I need to run this at last
onData(null, {countryColumns});
我该怎么做?我试图使用async
包,但它不起作用。该功能仍然运行了两次。
答案 0 :(得分:2)
Array.prototype.map()
是一个同步函数。因此,对committees.map()
和countries.map()
的调用将按顺序同步运行,并在运行后的代码行之前完成。
因此,同步代码并没有什么棘手的问题。它按顺序运行并同步完成。
因此,您显示的代码将执行以下操作:
countryColumns
。committees.map()
将项目添加到countryColumns
。countries.map()
将项目添加到countryColumns
。您展示的代码只会拨打onData()
一次。如果它被多次调用,则整个代码块可能包含在本身被多次调用的内容中。要解决这个问题,您必须在此代码之外查看此代码的调用方式。