데이터베이스의 모든 테이블을 가져와 하나씩 삭제해야합니다. 그러나 각 DROP TABLE
은 asnyc입니다. 가장 중요한 것은 반환 된 약속은 모든 테이블이 삭제 된 경우에만 해결되어야합니다. 이것을 jQuery 정의 함수로 작성하는 방법
clear: function() {
var dfd = $.Deferred();
var sql = "SELECT name FROM sqlite_master WHERE type='table' AND name != ?",
args = ["__WebKitDatabaseInfoTable__"];
var dbTableNamesResult = function(tx, result) {
var dropSql = "";
for (var i = 0; i < result.rows.length; i++) {
dropSql = "DROP TABLE IF EXISTS " + result.rows.item(i).name + "; ";
execute(dropSql, null, errorCallback);
}
};
execute(sql, args, dbTableNamesResult, dfd.reject);
return dfd;
},
Execute
sql
,
arguments
,
successCallback
및
errorCallback
걸린다. 아약스 요청의 결과 개체를 연기 첫 번째 함수
getTables
반환 : 여기
clear: function() {
var dfd = $.Deferred();
var sql = "SELECT name FROM sqlite_master WHERE type='table' AND name != ?",
args = ["__WebKitDatabaseInfoTable__"];
dfd.pipe(function(tx, result) {
var deferreds = [];
for (var i = 0; i < result.rows.length; i++) {
var dfd = $.Deferred();
dropSql = "DROP TABLE IF EXISTS " + result.rows.item(i).name + "; ";
execute(dropSql, dfd.resolve, errorCallback);
deferreds.push(dfd);
}
return $.when.apply(null, deferreds);
});
execute(sql, args, dfd.resolve, dfd.reject);
return dfd;
},
이 http://jsfiddle.net/zerkms/XQwPq/
function getTables()
{
var dfd = $.Deferred();
$.ajax({
url: '/echo/json/',
data: {
json: '{"tables":["a","b","c"]}',
delay: 1
},
type: 'post',
dataType: 'json',
success: function(response) {
dfd.resolve(response.tables);
}
});
return dfd;
}
function dropTables(tables)
{
console.log('tables to delete: ' + tables.join(', '));
var deferreds = [];
for (var i = 0, len = tables.length; i < len; i++) {
var dfd = $.Deferred();
(function(dfd) {
$.ajax({
url: '/echo/json/',
data: {
json: '{"table":"' + tables[i] + '"}',
delay: Math.random() * 3
},
type: 'post',
dataType: 'json',
success: function(response) {
console.log('table ' + response.table + ' deleted');
dfd.resolve();
}
});
})(dfd);
deferreds.push(dfd);
}
return $.when.apply(null, deferreds);
}
getTables().pipe(dropTables).done(function() {
console.log('process finished');
});
설명 유사한 예를하다 : 이것에 대해 어떻게
http://api.jquery.com/deferred.pipe/ –