2012-05-23 2 views
0

Je commence par javascript. Je pense que cette question ne concerne que javascript, mais elle implique PhoneGap et WebSQL. Mon problème et ce que je veux faire sont dans les commentaires de code.Je veux un résultat qui est à l'intérieur d'une fonction de rappel à l'intérieur d'un autre

var MyDatabase = function() { 
    if (!(this instanceof MyDatabase)) return new MyDatabase(); 
} 

MyDatabase.prototype = { 
    db: window.openDatabase("my_database", "1.0", "My Database", 5000000), 

    getAllPosts: function(callback) { 
     var query = "SELECT * FROM posts", 
      that = this, 
      result; 

     function onSuccess (transaction, resultSet) { 
      console.log('get posts with success.'); 
      result = resultSet.rows; // I think this should work, but it doesn't 
      if (typeof callback === 'function') callback.call(that, result); 
     } 

     function onError(transaction, error) { 
      console.log(error); 
     } 

     this.db.transaction(function(t){ t.executeSql(query, [], onSuccess, onError) }); 

     return result; // result still undefined 
    } 
}; 

// Imagine that the posts table are created and has some rows seted. 

var database = MyDatabase(); 

// The callback works fine. 
database.getAllPosts(function(result) { 
    // do something with result. 
    console.log(result); 
    // SQLResultSetRowList 
}); 

// But in some cases I want to do this and I get result as undefined =(
var result = database.getAllPosts(); 

Une idée?

Merci.

Répondre

2

Vous devez utiliser un rappel. Vous ne pouvez pas retourner result dans votre code, puisque onSuccess n'a pas encore été appelé, donc rien n'aura défini result.

Questions connexes