gde*_*dex 27 javascript jquery loops deferred
这应该是一个简单的.我有一个被调用的函数,我需要等待所有的异步操作完成.我想要的是这样的......
self.processSchema(data).done(function(results){ //do stuff});
Run Code Online (Sandbox Code Playgroud)
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());
}
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用,我是$的新手.推迟所以任何指导都会有所帮助
ade*_*neo 34
每次迭代都需要一个承诺
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();
}
Run Code Online (Sandbox Code Playgroud)
对于功能编程恶魔(像我一样),这里是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();
};
Run Code Online (Sandbox Code Playgroud)
另外我想注意你正在迭代table,但是没有对迭代中的每个项做任何事情(即你的回调each没有参数.)现在,我不确定你的目标是什么,但是这个对我来说似乎不对:P
| 归档时间: |
|
| 查看次数: |
24037 次 |
| 最近记录: |