2013-10-02 156 views
1

我有一個phonegap數據庫,其功能如下。我想在整個函數之外返回最後的字符串變量「feeds」。這隻返回「未定義」。請幫我所需的更改返回「飼料」 variable.`在Phonegap DB函數中的函數外返回一個變量

function getProviders() { 
    var feeds = ""; 
    var db = window.openDatabase("db", "1.0", "desc", 1000000); 

    db.transaction(function(tx) { 
     var db = window.openDatabase("db", "1.0", "desc", 1000000); 
     tx.executeSql("SELECT * FROM `feed_provider`", [], function(tx, results) { 
      var len = results.rows.length; 

      for (var i = 0; i < len; i++) { 
       feeds += results.rows.item(i).id + "|" + results.rows.item(i).name + "|" + results.rows.item(i).status + "|" + results.rows.item(i).feed_url + ","; 
      } 
     }, sqlerror); 
    }, sqlerror2); 
    return feeds; 
} 
+0

@techytree:你有什麼理由不使用回調? – karthick

+0

@karthick:我不知道如何使用回調。 – TechyTee

回答

5

我要去承擔任何db.transactiontx.executeSql是異步,在這種情況下,我會用一個deferred

function getProviders() { 
    var feeds = ""; 
    var def = $.Deferred(); 
    var db = window.openDatabase("db", "1.0", "desc", 1000000); 

    db.transaction(function(tx) { 
     var db = window.openDatabase("db", "1.0", "desc", 1000000); 
     tx.executeSql("SELECT * FROM `feed_provider`", [], function(tx, results) { 
      var len = results.rows.length; 

      for (var i = 0; i < len; i++) { 
       feeds += results.rows.item(i).id + "|" + results.rows.item(i).name + "|" + results.rows.item(i).status + "|" + results.rows.item(i).feed_url + ","; 
      } 
      def.resolve(feeds); 
     }, sqlerror); 
    }, sqlerror2); 
    return def.promise(); 
} 

這樣稱呼:

getProviders().done(function(feeds) { 
    // do something with feeds 
}); 
+0

我已經試過這個,現在它返回一個對象,當警報時顯示[object Object]。如何通過此對象在'feeds'變量中使用字符串?認爲我想提醒feed變量中的字符串值。我怎樣才能做到這一點? – TechyTee