Я хочу получить обратный вызов успешной транзакции SQLite с Ionic 2. Я все еще изучаю обещание HTML5, и это все еще немного запутанно. И поскольку я ранее использовал jQuery Deferred, я пытаюсь адаптировать то, что я использовал с jQuery.ionic 2 SQLite управлять обратным вызовом с Promise
Перед ионического 2, я использовал следующий шаблон Jquery выполнить мою асинхронную SQL:
var SqlResult = function(sqlToExecute,bracketValues){
this.sqlToExecute = sqlToExecute;
this.bracketValues =bracketValues;
};
SqlResult.prototype.execSqlCustomDeferred = function(){
var execSqlCustomDeferredRes = $.Deferred();
var execSqlCustomDeferredResProm = execSqlCustomDeferredRes.promise();
var sqlToExecuteForTx = this.sqlToExecute;
var bracketValuesForTx = this.bracketValues;
DbManagement.db.transaction(function(tx){
tx.executeSql(sqlToExecuteForTx,bracketValuesForTx,success,error);
function success(tx,rs){
execSqlCustomDeferredRes.resolve(rs);
}
function error(tx,error){
execSqlCustomDeferredRes.reject(error);
}
});
return execSqlCustomDeferredResProm;
};
С этим рисунком я получал результат асинхронного, с SqlResult.prototype.execSqlCustomDeferred.done(function(res){...})
.
Теперь я изо всех сил, чтобы выяснить, как все должно быть предписано использовать шаблон Promise, я думал о следующем, но она не соответствует:
Этот случай не будет работать, потому что resolve()
или reject()
не существуют (он не переносит).
private execSqlCustom = (sqlToExecute:string,bracketValues:Array<any>) => {
let sqlToExecuteForTx:string = sqlToExecute;
let bracketValueForTx:Array<any> = bracketValues;
return this.db.transaction(
function(tx){
tx.executeSql(sqlToExecuteForTx,bracketValueForTx,success,error);
function success(tx,rs){
resolve(rs);
}
function error(tx,error){
console.log('execSqlCustom error ' + error.message);
reject(error);
}
}
);
Это не будет работать ни, потому что я думаю, что я потеряю контекст (это) (это transpiles, но при исполнении он говорит мне, что:
он не может читать дб неопределенной
):
private execSqlCustom = (sqlToExecute:string,bracketValues:Array<any>) => {
let sqlToExecuteForTx:string = sqlToExecute;
let bracketValueForTx:Array<any> = bracketValues;
return new Promise(function(resolve,reject){
this.db.transaction(
function(tx){
tx.executeSql(sqlToExecuteForTx,bracketValueForTx,resolve,reject);
}
);
кто-нибудь определить, что я делаю неправильно?