2013-06-24 37 views
9

談到HTML5數據庫(sqlite),我最近使用了成功/錯誤回調函數,這兩個函數都是從transactionexecuteSql函數中獲得的。我發現,這兩個函數,成功/錯誤回調順序顛倒,例如:HTML5數據庫 - 事務VS executeSql回調順序

交易

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

的ExecuteSQL

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

也許這並不重要要知道的事情,但我想知道是否有這個顛倒的順序的原因..恕我直言,這將是有用的具有相同的每個函數的回調順序,所以你學會了如何使用一個,你知道所有其他人的工作!

在此先感謝,認爲

+0

你有沒有想過或得到答案呢?我也在試着理解這個差異,因爲我將我的第一個sqlite接口放在一起。它一直讓我感到困惑,因爲我會看到兩次調用之間的成功CB和錯誤CB逆轉。 db.transaction就像傳統的「準備」語句,而executeSql實際上執行db調用? – rolinger

+0

不,不幸的是,直到現在沒有答案.. :(我可能會死,不知道背後的原因:) – BeNdErR

回答

1

我這裏指的是 [the main RFC document]: 而且值得注意的是,

本規範不再有效維護和Web 應用工作組不打算進一步維護它。

儘管如此,回到了這個問題。 這個背後的推理可能會被埋沒in the archives of the discussion mailing lists

我可以推斷人們通常如何構建API。

首先要注意的是,這兩個函數的各種回調參數都是可選的,所以您想要從最常用到最少使用的順序對它們進行排序。 如果您按照相反的順序放置它,則會強制人們聲明空函數。

因此,在交易中,錯誤處理比成功處理更重要。 交易被「設計」失敗,並且非常重要,因爲我們希望他們不時失敗並處理失敗。

相反,查詢應返回其結果,而不會失敗太多。 雖然,當我們取得成功時,這應該經常發生,我們希望處理這樣的查詢的結果,這是當您使用SQLStatementCallback callback而不是SQLVoidCallback successCallback。 此回調不是用於處理成功,而是用於顯式處理語句結果(即處理結果)。

比較transactionexecuteSql這裏的聲明。