如果找到多个结果,则循环函数

funcion looping if it finds more then one result

本文关键字:循环 函数 结果 如果      更新时间:2023-09-26

我有一个函数,如果每次循环在第一个方法中发现多于1个结果,则继续循环:

schedule: function () {
  Meteor.call('getOneUser', Session.get("selectedEmployee"), function (error, mainResult) {
    if (error) {
      console.log(error.message);
    } else if (mainResult != undefined) {
      _.each(mainResult.schedule, function (schedules) {
        Meteor.call('timezoneChanger', schedules.from, function (error, result) {
          if (error) {
            console.log(error.message);
          } else {
            schedules.from = result;
            Meteor.call('timezoneChanger', schedules.to, function (error, result) {
              if (error) {
                console.log(error.message);
              } else {
                schedules.to = result;
                Session.set('foundSchedule', mainResult.schedule);
              }
            });
          }
        });
      });
    }
  });
  console.log("a");
  return Session.get('foundSchedule');
}

下面的代码记录"a"无限次。但是当在我的mongoDB我只有一个时间表集合,它只运行一次(mainResult.schedule)。

模板看起来像这样:

<template name="employee_schedule">
    Schedule:<br>
    {{#each schedule}}
    <div>{{from}} - {{to}}</div>
    {{/each}}
</template>

可能的问题是响应性,假设您在响应性上下文中(如模板帮助器)使用此方法。

在每次更新之后使用Session.set('foundSchedule', ...),这会触发使用Session.get('foundSchedule')的每个反应性方法的重新运行-您在最后一行执行。要查看是否有此问题,请注释掉Session.set行并检查日志,无限循环应该消失。

要解决这个问题,可以在一个帮助器中提供数组,并在数组项的上下文中使用这里设置的fromto参数。这也将显著降低代码的复杂性。