2013-06-24 2 views
9

Обсуждение базы данных HTML5 (sqlite). Недавно я использовал обратные вызовы с возвратом/ошибкой как от transaction10, так и от executeSql. Я узнал, что для этих двух функций, порядок обратного вызова/ошибки перевернут, например:База данных HTML5 - транзакция VS callSql callbacks

сделки

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

ExecuteSQL

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

Вероятно, это не важно но я хотел бы знать, есть ли причина для этого отмененного порядка. IMHO, было бы полезно иметь один и тот же порядок обратного вызова для каждой функции, так как вы узнали как использовать один, вы знаете, как работают все остальные!

Спасибо заранее, что касается

+0

Вы когда-нибудь это выясняли или получали ответ? Я тоже пытался понять разницу, поскольку я собираю свой первый интерфейс sqlite. Это продолжало приводить меня в замешательство, так как я видел, как successCB и errorCB менялись между двумя вызовами. является db.transaction, как традиционный оператор «подготовить», тогда как executeSql фактически выполняет вызов db? – rolinger

+0

Нет, к сожалению, ответов нет до сих пор .. :(Я, наверное, умру, не зная причину этого :) – BeNdErR

ответ

1

Я имею в виду здесь, чтобы [the main RFC document]: и это стоит отметить, что

Эта спецификация больше не в активном обслуживании и веб- Applications Рабочая группа не намерены продолжать его поддерживать.

Тем не менее, вернемся к вопросу. Обоснование этого может быть похоронено in the archives of the discussion mailing lists

Я могу рассуждать о том, как люди обычно создают API.

Прежде всего следует отметить, что различные аргументы обратного вызова обеих функций являются необязательными, поэтому вы хотите заказать их из наиболее используемых наименее используемых. Если вы положите его в обратном порядке, вы заставите людей объявлять пустые функции.

Таким образом, в транзакции обработка ошибок важнее, чем успешная обработка. Сделки «спроектированы» с ошибками изящно и чрезвычайно важны, потому что мы ожидаем, что они будут время от времени терпеть неудачу и справиться с их провалом.

Напротив, запрос должен возвращать свои результаты без лишних затрат. Хотя, когда у нас есть успех, и это должно происходить очень часто, мы хотим обработать результат такого запроса, и это когда вы используете SQLStatementCallback callback, который не является SQLVoidCallback successCallback. Этот обратный вызов предназначен не для успешного использования, а для явного управления результатами операторов (т. Е. Для обработки результатов).

Сравните transaction и объявления executeSql здесь.