完成另一条Javascript之后执行一条指令

时间:2020-05-13 01:52:33

标签: javascript iteration order-of-execution

我在执行Javascript方法时遇到问题。我有这段代码:

for (let c = -100; c < 501; c += 100) {
  fetch(`data/votes_${c + 101}-${c + 200}.json`)
    .then((resp) => resp.json())
    .then((data_vot) => {
      proy_etiq.forEach((eti_selec) => {
        let cont_si_tot = 0;
        data_vot.congresista.forEach((congresista) => {
          congresista.proyecto.forEach((proyecto) => {
            let cont_si = 0;
            eti_selec.proyectos.forEach((proy_selec) => {
              if (proyecto.id === proy_selec.id) {
                cont_si += proyecto.voto.si;
                proy_selec.votos[0] += cont_si;
              }
            });
            cont_si_tot += cont_si;
          });
        });
        flor_si.push({ Tema: eti_selec.nombre, abs: cont_si_tot });
      });
    });
}

我只需要在迭代完成后才添加变量,但是当我运行项目时,变量首先要添加(初始值为0),然后再进行迭代。 我怎样才能让它仅在过程完成后附加?

编辑: 由于之前我不太清楚,所以我分享了我问问题的一段代码

proy_etiq

CI_PROJECT_NAME是我已经拥有的列表,

2 个答案:

答案 0 :(得分:0)

如果您不希望追加作为迭代的一部分发生,请将其移出迭代。

let array = [];
let variable = 0;

list.forEach((item_1) => {
  ...
});

array.push(variable);

答案 1 :(得分:0)

不确定代码的确切用途是什么,我确定您可以肯定地对其进行优化。就是说,给定您的原始代码,我认为您可以通过将数组推入过程分配到另一个then块中来使其工作,这将确保在多个循环完成后才执行它。在下面放入更改后的代码段。

let array = [];

list.forEach((item_1) => {
  let variable = 0;
  fetch("data.json")
    .then((resp) => resp.json())
    .then((data) => {
      data.forEach((item_2) => {
        item_2.forEach((item_3) => {
          item_3forEach((item_4) => {
            if (condition) {
              variable += 1;
            }
          });
        });
        return 1;
      })
     //Changed code here.
    .then(_=>array.push({a: variable, b: item_1}))
    });
});