在JS中,如何在多个地图功能完成时运行一段代码?

时间:2016-05-27 06:32:07

标签: javascript meteor

我有几个地图功能可以准备我需要的数据。然后我使用这些数据运行一行代码。现在的问题是,最后一行执行两次。在地图功能之前和地图功能完成之后。我需要在地图完成后运行它。这是一个例子:

// 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包,但它不起作用。该功能仍然运行了两次。

1 个答案:

答案 0 :(得分:2)

Array.prototype.map()是一个同步函数。因此,对committees.map()countries.map()的调用将按顺序同步运行,并在运行后的代码行之前完成。

因此,同步代码并没有什么棘手的问题。它按顺序运行并同步完成。

因此,您显示的代码将执行以下操作:

  1. 初始化countryColumns
  2. 运行committees.map()将项目添加到countryColumns
  3. 运行countries.map()将项目添加到countryColumns
  4. 调用onData(null,{countryColumns});
  5. 您展示的代码只会拨打onData()一次。如果它被多次调用,则整个代码块可能包含在本身被多次调用的内容中。要解决这个问题,您必须在此代码之外查看此代码的调用方式。