Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 嵌套forEach/等待嵌套完成_Javascript_Foreach - Fatal编程技术网

Javascript 嵌套forEach/等待嵌套完成

Javascript 嵌套forEach/等待嵌套完成,javascript,foreach,Javascript,Foreach,这已经被问到了很多方面,但我找不到一个推论 我有两个数组,我试图比较这两个数组之间的日期,并构建一个列表,添加一个类,并在日期匹配时更改状态。我觉得forEach不是合适的工具。这是我的。我知道在内部循环结束之前,外部循环仍在继续,但我不确定如何修复它。似乎没有async/await,就有一种简单的方法 //主事件循环 events.forEach(event=>{ 让{ 日期 }=事件; //标前事件循环 presaleEvents.forEach(presaleEvent=>{ 让{ 预售

这已经被问到了很多方面,但我找不到一个推论

我有两个数组,我试图比较这两个数组之间的日期,并构建一个列表,添加一个类,并在日期匹配时更改状态。我觉得forEach不是合适的工具。这是我的。我知道在内部循环结束之前,外部循环仍在继续,但我不确定如何修复它。似乎没有async/await,就有一种简单的方法

//主事件循环
events.forEach(event=>{
让{
日期
}=事件;
//标前事件循环
presaleEvents.forEach(presaleEvent=>{
让{
预售日期
}=预售事件;
如果(预售日期===日期){
状态=‘预售事件’;
eventClass=‘预售’;
}
});
//只有3、5和6项是预售活动
让eventNode=`
  • ${status}
  • `; $(eventsList).append(eventNode); });
    我在发帖后几分钟(以及头撞到墙上几个小时后)就明白了这一点

    我只需在父循环内重置变量,但在内部循环外重置变量

    这是一张工作票

    //主事件循环
    events.forEach(event=>{
    让{
    日期
    }=事件;
    status='EVENT';//重置状态
    eventClass='';//重置eventClass
    //标前事件循环
    presaleEvents.forEach(presaleEvent=>{
    让{
    预售日期
    }=预售事件;
    如果(预售日期===日期){
    状态=‘预售事件’;
    eventClass=‘预售’;
    }
    });
    //只有3、5和6项是预售活动
    让eventNode=`
  • ${status}
  • `; $(eventsList).append(eventNode); });
    那里没有发生任何异步,您不应该弄乱异步性“我知道在内部循环完成之前外部循环正在继续”,但事实并非如此。您观察到的问题是什么?预期的行为是什么?你能在这里加入一个例子来说明发生了什么吗?外部循环在内部循环之前并没有结束。问题是,一旦找到匹配项,就全局设置这两个变量。@Jhecht。。。就这样。我自己想出来了,然后删除了我的问题,但我想我应该把它留给别人。很高兴你收到了。望远镜很奇怪。您不只是在事件对象上设置值的原因是什么?
    // main event loop
    events.forEach(event => {
      let {
        date
      } = event;
      // presaleEvent loop
      presaleEvents.forEach(presaleEvent => {
        let {
          presaleDate
        } = presaleEvent;
        if (presaleDate === date) {
          status = 'PRESALE EVENT';
          eventClass = 'presale';
        }
      });
    // only 3, 5 & 6 should be presale events
      let eventNode = `<li class="event ${eventClass}">${status}</li>`;
      $(eventsList).append(eventNode);
    });
    
    // main event loop
    events.forEach(event => {
      let {
        date
      } = event;
      status='EVENT'; // reset the status
      eventClass=''; // reset the eventClass
      // presaleEvent loop
      presaleEvents.forEach(presaleEvent => {
        let {
          presaleDate
        } = presaleEvent;
        if (presaleDate === date) {
          status = 'PRESALE EVENT';
          eventClass = 'presale';
        }
      });
    // only 3, 5 & 6 should be presale events
      let eventNode = `<li class="event ${eventClass}">${status}</li>`;
      $(eventsList).append(eventNode);
    });