等待来自 JQuery 中的异步嵌套函数的数据 $.each in Javascript

Waiting for data from async nested Functions within JQuery $.each in Javascript

这是 的后续问题。正如那里的评论中提到的,我想在 $.each 循环的最后一个异步作业之后处理数据。

例如:

  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");
      }
    });
  });

在这种情况下,当到达 // all done 评论时,一切都会正确注销。但是,如果我想稍后使用这些数据而不只是将其注销怎么办。

有没有办法在 $.each 范围之外等待这个数据?还是我总是必须处理嵌套函数中的所有内容?

您可以改用 promises

var promises = [];

$.each(..., function() {
    var promise = new Promise(function(resolve, reject) {;
        connection.query('INSERT INTO tableName SET ?', post, function(err, result) {
            if (err) {
                resolve(err.code);
            } else {
                resolve(result);
            }
        });
    });
    promises.push(promise);
});


var result = Promise.all(promises);

然后当你想使用数据时,你就可以

result.then(function(data) {
    // use data array looking like ["result data", "result data", "ER_DUP_ENTRY" .. etc]
})