«Uncaught TypeError: незаконный вызов» с базой данных HTML5 - PullRequest
2 голосов
/ 09 марта 2012

Я получаю сообщение об ошибке при попытке использовать следующий код в Chrome:

var db = openDatabase('foo', 1, 'foo', 1111);

var sql = function(callback){
    db.transaction(function(tx){
        callback(tx.executeSql);
    });
};

sql(function(query){
  // Dose 1 or more querys in same transaction
  query('CREATE TABLE IF NOT EXISTS DEMO1 (id unique, data)');
  query('CREATE TABLE IF NOT EXISTS DEMO2 (id unique, data)');
});

Sasy: Uncaught TypeError: Незаконный вызов

И я действительно не знаю, что это значит.

Однако этот код работает просто отлично:

var db = openDatabase('foo', 1, 'foo', 1111);

var sql = function(callback){
    db.transaction(function(tx){
        callback(tx);
    });
};

sql(function(query){
  // Dose 1 or more querys in same transaction
  query.executeSql('CREATE TABLE IF NOT EXISTS DEMO1 (id unique, data)');
  query.executeSql('CREATE TABLE IF NOT EXISTS DEMO2 (id unique, data)');
});

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

1 Ответ

1 голос
/ 09 марта 2012

Это относится к нескольким хост-объектам в Chrome. .bind должно работать в следующих случаях:

callback(tx.executeSql.bind(tx));

Дело в том, что ссылка на tx потеряна (значение this используется для внутреннего использования). Вы передаете «универсальную» функцию прототипа SQLTransaction без информации о том, что она должна быть вызвана на tx. Однако .bind правильно связывает значение this, даже если вы вызываете его не как obj.func(), а как вызов функции "голый".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...