等待数据从asynchronous嵌套在JQuery中的函数$ .each在Javascript中

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

举个例子:

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

在这种情况下,当//完成所有的注释时, 所有东西都可以正常注销。 但是,如果我想稍后使用这些数据,而不是将其logging下来。

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

您可以使用promise来代替

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