【问题标题】:Execute an instruction after finishing another in Javascript在 Javascript 中完成另一条指令后执行一条指令
【发布时间】:2020-08-29 01:54:16
【问题描述】:

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

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;
            }
          });
        });
      });
    });
  array.push({a:variable, b: item_1});
});

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

编辑: 由于我之前不是很清楚,我分享我提出问题的一段代码

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 });
      });
    });
}

proy_etiq 是我已经拥有的列表,

【问题讨论】:

    标签: javascript iteration order-of-execution


    【解决方案1】:

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

    let array = [];
    let variable = 0;
    
    list.forEach((item_1) => {
      ...
    });
    
    array.push(variable);
    

    【讨论】:

    • fetch() 是异步的。这有什么帮助?
    • @charlietfl 这取决于fetch 的目的以及 OP 最终想要从他们的代码中得到什么。就个人而言,我不明白为什么 OP 在 every 迭代中调用fetch("data.json"),因为它可能每次都会加载相同的东西,所以最好也将它拉出循环只需加载一次。不过OP的需求从问题文字上看不是很清楚,所以我就按面子回答了。
    【解决方案2】:

    不确定代码的确切用途是什么,我相信您绝对可以优化它。也就是说,鉴于您的原始代码,我觉得您可以通过将数组推送过程委托给另一个 then 块来使其工作,这将确保它在多个循环完成后执行。在下面放入更改后的 sn-p。

    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}))
        });
    });

    【讨论】:

      猜你喜欢
      • 2017-06-06
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      • 1970-01-01
      相关资源
      最近更新 更多