jquery在.each循环中延迟

这应该是一个简单的。 我有一个被调用的函数,我需要等待所有的异步操作完成。 我想要的是这样的……

self.processSchema(data).done(function(results){ //do stuff}); 

processSchema函数使用$ .each循环并调用异步方法。

 var processSchema = function(data) { var def = new $.Deferred(); $.each(table, function() { //calls an async SQLitePlugin method db.executeSql(sql, data, function(tx, results){ def.resolve(results); } } return(def.promise()); } 

这似乎不起作用,我是$.Deferred的新手,所以任何指导都会有所帮助

每次迭代都需要一个承诺

 var processSchema = function(data) { var promises = []; $.each(table, function() { var def = new $.Deferred(); db.executeSql(sql, data, function(tx, results){ def.resolve(results); }); promises.push(def); }); return $.when.apply(undefined, promises).promise(); } 

对于function编程恶魔(像我一样),这里是adeneo答案的单表达式版本:

 var processSchema = function(data) { return $.when.apply($, $.map(table, function() { var def = new $.Deferred(); db.executeSql(sql, data, function(tx, results){ def.resolve(results); }); return def; })).promise(); }; 

另外我还要注意你是在迭代表,但是没有对迭代中的每个项做任何事情(即你们each的回调都没有参数。)现在,我不确定你的目标是什么,但这对我来说似乎不对:P