2013-06-24 10 views
9

parlando di database HTML5 (sqlite), ho recentemente utilizzato callback di successo/errore da entrambe le funzioni transaction e executeSql. Ho scoperto che per queste due funzioni, l'ordine di callback successo/errore è invertito, per esempio:Database HTML5 - transazione VS executeSql callbacks

transazione

database.transaction(function(tx){ 
    //--- do something 
}, function(){ 
    //--- error handling 
}, function(){ 
    //--- success handling 
}); 

ExecuteSQL

tx.executeSql(sqlStatement, [], successCallback, errorCallback); 

Probabilmente non è un importante cosa sapere, ma mi piacerebbe sapere se c'è un motivo per questo ordine inverso .. IMHO, sarebbe utile avere lo stesso ordine di richiamata per ogni funzione, così come hai imparato come usarne uno, sai come funzionano tutti gli altri!

Grazie in anticipo, riguarda

+0

Avete mai capito questo o ottenere una risposta su di esso? Anch'io stavo cercando di capire la differenza mentre sto mettendo insieme la mia prima interfaccia sqlite. Continuava a causarmi confusione visto che avrei visto il successo C e l'errore CBR invertiti tra le due chiamate. è db.transaction come una tradizionale istruzione "prepare" mentre executeSql esegue effettivamente la chiamata db? – rolinger

+0

No, purtroppo nessuna risposta fino ad ora .. :(Probabilmente morirò non sapendo il motivo dietro questo :) – BeNdErR

risposta

1

mi riferisco qui per [the main RFC document]: e vale la pena notare che

Questa specifica non è più in manutenzione attiva e il Web Applicazioni Gruppo di lavoro non lo fa intendo mantenerlo ulteriormente

Tuttavia, torna alla domanda. Il ragionamento alla base di questo può essere sepolto in the archives of the discussion mailing lists

Posso ragionare su come le persone di solito creano un'API.

Prima cosa da notare è che i vari argomenti di callback di entrambe le funzioni sono opzionali, quindi si desidera ordinarli dal più usato al meno utilizzato. Se lo si inserisce nell'ordine opposto si costringe le persone a dichiarare funzioni vuote.

Così, in una transazione, la gestione degli errori è più importante di gestione successo. Le transazioni sono "progettate" per fallire con garbo, ed estremamente importanti perché ci aspettiamo che falliscano di tanto in tanto e per gestire il loro fallimento.

Al contrario, una query deve restituire i suoi risultati, senza fallire troppo. Mentre, quando abbiamo successo, e questo dovrebbe accadere molto spesso, vogliamo elaborare il risultato di tale query, e questo è quando si usa lo SQLStatementCallback callback che non è un SQLVoidCallback successCallback. Questo callback non è per la gestione del successo, ma per la gestione esplicita dei risultati delle istruzioni (ad esempio per elaborare i risultati).

Confronta le dichiarazioni transaction e executeSql qui.