代码之家  ›  专栏  ›  技术社区  ›  k4yaman

正在等待来自JQuery$中异步嵌套函数的数据。每个都是Javascript

  •  3
  • k4yaman  · 技术社区  · 9 年前

    这是一个后续问题 Asynchron Errorhandling inside $.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");
          }
        });
      });
    

    在这种情况下,当 //全部完成 评论已达成。但如果我想稍后使用这些数据,而不是将其注销,该怎么办呢。

    是否有方法在$之外等待此数据。每个范围?还是我总是必须处理嵌套函数中的所有内容?

    1 回复  |  直到 7 年前
        1
  •  4
  •   adeneo    9 年前

    你可以用承诺代替

    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]
    })