これは単純なものでなければなりません。呼び出される関数があり、すべての非同期操作が完了するまで待機する必要があります。私が欲しいのはこのようなものです...
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();
}
関数型プログラミングの悪魔(私のような)の場合、ここに 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();
};
また、table
を繰り返し処理しているが、繰り返しの各項目では何もしていないことに注意してください(つまり、each
のコールバックには引数がありません)。私はあなたの目標が何であるかわかりませんが、これは私には正しくないようです:P