【问题标题】:Push objects to Array in nested loop在嵌套循环中将对象推送到数组
【发布时间】:2017-01-22 16:08:21
【问题描述】:

在两个嵌套循环完成迭代后,我在发送填充数组时遇到了困难。我正在使用 Async npm 库并尝试使用 async.forEach 完成回调来发送整个数组。内部数组迭代了 5 个对象,这构成了一个“课程”——之后课程对象被保存到一个人对象中,每个人对象有多个课程对象。

    var self = this,
    person = [],
    course = [];


    async.forEach(elements.value, function (element, callback1) {
      self.elementIdElements(element.ELEMENT, 'td').then(function (rows) {
        async.forEach(rows.value, function (cell, callback2) {
          self.elementIdText(cell.ELEMENT).then(function (res) {
            course.push(res.value);
            callback2();
          });
        }, callback1);
        person.push(course);
        course = [];
      });
    }, function (err) {
      res.send('grades: ' + JSON.stringify(person));
    });

但是,它在遍历数组的过程中调用了 sendResponse,我根本无法想象为什么会发生这种情况,它应该在遍历整个过程后调用它。范围和异步调用令人困惑

提前致谢, 克里斯

更新 - 解决方案

我终于用下面的代码弄清楚了回调的范围:

var self = this,
    person = [],
    course = [];

    async.forEach(elements.value, function (element, callback1) {
      self.elementIdElements(element.ELEMENT, 'td').then(function (rows) {

        async.forEach(rows.value, function (cell, callback2) {
          self.elementIdText(cell.ELEMENT).then(function (res) {
            course.push(res.value);
            callback2();
          });

        }, function (err) {
          person.push(course);
          course = [];
          callback1();
        });

      });
    }, function (err) {
      res.send('grades: ' + JSON.stringify(person));
    });

【问题讨论】:

标签: arrays node.js asynchronous foreach callback


【解决方案1】:

您必须将回调嵌套在彼此内部。使用异步库,许多调用的最后一个参数是“最终回调”,它让您知道一切何时完成。

你是外部的async.forEach 看起来不错,sendResponse 的最终回调是最后一个参数。

改变内部的async.forEach 所以callback 是最后一个参数。 async.forEach(rows.value, getCourseData, callback)

我还可以建议更具描述性的回调名称,以便您轻松跟踪(“innerCallback”“outerCallbacl”或“rowsCallbacl”......随便你)

【讨论】:

  • 感谢您回复 Clay,我尝试将最后一个回调 arg 添加到内部 async.forEach - 我已经更新了原始帖子中的代码以反映这一点。但是,它仍然没有给我一个完整的数组null
  • 你的帖子让我朝着正确的方向前进,我已经更新了帖子以包含工作代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 2019-03-28
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 2021-06-14
相关资源
最近更新 更多