2010-12-10 3 views
0

J'utilise la fonction suivante pour exécuter SQL, ça marche bien quand aucun retour n'est nécessaire mais si je fais une requête comme "SELECT * FROM table" alors il ne retournera rien. La fonction est:Comment obtenir une fonction pour retourner sur les bases de données Javascript SQLite?

function executeSQL(query) 
{ 
    return db.transaction(function(q) 
    {  
    return q.executeSql(query, null, 
    function (q, results) 
    { 
    debug(results); 
    return results; 
    }, 
    function (q, error) 
    { 
    debug(error); 
    } 
); 
    }); 
} 

Et la façon dont je l'appeler est:

results = executeSQL('SELECT * FROM `table`'); 

Répondre

1

La fonction transaction est asynchrone à: il ne faut pas attendre la fonction que vous lui a donné que les rendements des paramètres, et le fait ne rapporte probablement rien.

Je ne pense pas qu'il soit possible d'écrire une fonction wrapper qui retourne le résultat, sauf si vous attendez dans une boucle, ce qui est problématique pour JavaScript, et aussi pas conseillé.

function executeSQL(query, callback) { 
    db.transaction(function(q) { 
     q.executeSql(query, null, function (q, results) { 
      callback(results); 
     }, function (q, error) { 
      debug(error); 
     }); 
    }); 
} 

var query = "SELECT 1"; 
executeSQL(query, function(result) { 
    alert(result); 
}); 
alert("When am I?"); // this may get called before alert(result) 
Questions connexes