2012-04-24 146 views
0

我定義以下JavaScript函數:從函數返回結果 - JavaScript的

function RecoverDataFromTable(table_name) { 
       query = ""; 

       //some code that build a query string from table_name and 
       //other arguments given to the function 

       function Query(database) { 
       database.executeSql(query, [], RecoverResults, Error) 
       } 

       function RecoverResults(database, results) { 
       var my_result = results.rows(0).id; 
       // assume this works and store a value to my_result 
       } 

       function Error(error) { 
       //alert something 
       } 

       function Success() { 
       //alert something 
       } 

       database.transaction(Query, Error, Success)     

       } 

現在,我怎麼能返回my_result價值,所以我能做到這一點?

var my_var = RecoverDataFromTable(table_name, argument1, argument2.....) 

在此先感謝。 詢問您是否需要更多解釋。 :)

http://www.raymondcamden.com/index.cfm/2012/1/6/Working-with-dates-and-SQLite-in-PhoneGap

+0

**錯誤**和** **的成功是回調......他們是異步的? – McGarnagle 2012-04-24 07:24:45

+0

我是一個初學者,所以我不知道....但我認爲是這樣的.. – Stefano 2012-04-24 07:40:45

+0

好的......你能提供關於**數據庫**的更多信息嗎?看起來像是一個JS庫。 – McGarnagle 2012-04-24 07:50:03

回答

1

你不能像這樣設置變量,因爲這個函數是異步的。相反,您應在請求中包含回調函數RecoverDataFromTable。定義這樣的:

function RecoverDataFromTable(callback, table_name) { 
    ... 

    function RecoverResults(database, results) { 
      var my_result = results.rows(0).id; 
      // assume this works and store a value to my_result 
      // make the callback: 
      callback(result); 
    } 
    ... 
} 

然後撥打電話這樣的:

function handleResult(my_result) 
{ 
    // handle the result here 
} 

RecoverDataFromTable(handleResult, table_name, argument1, argument2.....); 
+0

工作!謝謝! – Stefano 2012-04-24 08:33:17

0

如果你的函數RecoverResults是異步的,那麼你可以使用到::

function RecoverDataFromTable(callback, table_name) { 
     ... 
     function RecoverResults(callback, database, results) { 
      var my_result = results.rows(0).id; 
      callback(my_result); 
      // assume this works and store a value to my_result 
     } 
} 
RecoverDataFromTable(function(result) { 
    var my_var = result; 

}, table_name, argument1, argument2.....); 
+0

這是非常類似於正確答案。它不起作用,因爲在RecoverResults參數中有回調。感謝:) – Stefano 2012-04-24 08:35:02

0

是誰說不是呢?

function RecoverResults(database, results) { 
return results.rows(0).id; 
} 

var my_result = RecoverResults(); 
+0

不,因爲它看起來像功能是異步的... – McGarnagle 2012-04-24 07:59:32