【问题标题】:returning results from functions - javascript [closed]从函数返回结果 - javascript [关闭]
【发布时间】:2012-04-24 07:20:02
【问题描述】:

我定义了以下 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

【问题讨论】:

  • ErrorSuccess 是回调...它们是异步的吗?
  • 我是初学者,所以我不确定....但我想是的..
  • 好的...你能提供更多关于什么是 database 的信息吗?好像是个 JS 库。
  • 这是一个使用 sql lite 的 web sql 数据库。我正在 iOs 上写一个 phonegap 应用程序。

标签: javascript ajax database callback return-value


【解决方案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.....);

【讨论】:

    【解决方案2】:

    如果您的函数 RecoverResults 是异步的,那么您可以使用 to::

    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.....);
    

    【讨论】:

    • 这与正确答案非常相似。它不起作用,因为 RecoverResults 参数中有回调。无论如何谢谢:)
    【解决方案3】:

    不就是这样吗?

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

    【讨论】:

    • 不行,因为看起来函数是异步的……
    猜你喜欢
    • 1970-01-01
    • 2016-03-11
    • 2011-11-07
    • 2014-03-25
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    相关资源
    最近更新 更多