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

时间:2014-05-07 20:18:43

标签: javascript meteor

如果在每个循环的第一个方法中找到多于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>

1 个答案:

答案 0 :(得分:0)

可能的问题是反应性,假设您在反应性上下文中使用此方法,如模板助手。

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

要解决此问题,请在一个帮助程序中提供数组,并在此处设置的fromto参数在数组项的上下文中使用的另一个帮助程序中。这也会显着降低您的代码复杂性。