$ .each

时间:2016-02-06 21:39:17

标签: javascript node.js error-handling jquery-callback node-mysql

我在服务器端Node.js,并以某种方式陷入了回调。我使用以下函数在表中使用mysql pkg:

插入数据
  connection.query('INSERT INTO tableName SET ?', post, function(err, result) 
  {
    if (err) {
      if (err.code === 'ER_DUP_ENTRY')
        {  }
      else
        { throw err; }
    }
  });

我想记录有多少重复条目而没有停止通过$ .each调用上述函数的循环。

它说here我有3种可能:throw,callbacks和EventEmitter。投掷不起作用,因为这会阻止一切。我用回调尝试了它,但因为我在$ .each的回调中,我无法在上述范围内找到答案。我没有尝试使用静态EventEmitter,因为我不知道如何从$ .each选择器返回任何值,除了选定的数据。

任何建议都会得到满足。

1 个答案:

答案 0 :(得分:1)

将所有内容嵌套在闭包中并在回调中计算已完成的查询,以便您知道最后一个查询何时完成:

(function(){
  var errors = 0;
  var started = 0;
  var successful = 0;
  $.each(..., function(){
    started++;
    connection.query('INSERT INTO tableName SET ?', post, function(err, result) 
    {
      if (err) {
        if (err.code === 'ER_DUP_ENTRY')
          { errors++; }
        else
          { throw err; }
      } else { successful++;}
      if (started == successful + errors) {
         // all done
         console.log(errors + " errors occurred");
      }
    });
  });
})();