【问题标题】:Return true or false from sqlite transaction result从 sqlite 交易结果返回 true 或 false
【发布时间】:2014-11-10 21:35:58
【问题描述】:

我在 phoneGap 中使用 sqlite 和 javascript。我正在尝试获取 'lookMatchEvent(...)' 函数的返回值(true 或 false),并通过检查 addValueToDB(..) 函数中的结果来做一些事情。但是 lookMatchEvent(...) 函数没有立即返回值。现在它只返回 false 值作为默认值。 sql语句绝对没问题,我认为这是回调值的问题。如果有人能在下面的编码中解决这个问题,那就太好了。.. :) 非常感谢提前...

function AddValueToDB(sportName, location, dateTime, team, teamOpp) {
if(lookMatchEvent(sportName, location, dateTime, team, teamOpp)) {//adding new row to database}
else {donot add data}
}

function lookMatchEvent($sportName, $location, $dateTime, $team, $teamOpp) {
    db.transaction(function(transaction) {
        transaction.executeSql("SELECT * from sport where sportName='"+$sportName+"' and location='"+$location+"' and dateTime='"+$dateTime+"' and team='"+$team+"' and teamOpp='"+$teamOpp+"';",
        [],
         function(transaction, result) {
            if (result != null && result.rows != null)
            {
                if (result.rows.length > 0) {
                    return false;
                }
                return false;
            }
            else
            {
                return true;
            }
        },errorHandler);
    },errorHandler,nullHandler);
}

【问题讨论】:

    标签: javascript sqlite cordova


    【解决方案1】:

    回调函数异步运行,return 仅从那个函数返回。

    您必须将之后应该运行的代码拆分为一个单独的函数,并从回调中调用它:

    function AddValueToDB(sportName, location, dateTime, team, teamOpp) {
        lookMatchEvent(sportName, location, dateTime, team, teamOpp);
    }
    
    function AddValueToDB_part2(result) {
        if (result) {
            ...
        } else {
            ...
        }
    }
    
    function lookMatchEvent(...) {
        db.transaction(...
            ...
            function(transaction, result) {
                if (result != null && result.rows != null)
                {
                    if (result.rows.length > 0) {
                        AddValueToDB_part2(false);
                    }
                    AddValueToDB_part2(false);
                }
                else
                {
                    AddValueToDB_part2(true);
                }
            }
            ...
        );
    }
    

    如果lookMatchEvent函数一定不知道从哪里调用(因为它是从多个地方调用的),你可以给第二个函数作为参数:

    function AddValueToDB(sportName, location, dateTime, team, teamOpp) {
        lookMatchEvent(sportName, location, dateTime, team, teamOpp,
                       function(result) {
            if (result) {
                ...
            } else {
                ...
            }
        });
    }
    
    function lookMatchEvent(..., my_callback) {
        db.transaction(...
            ...
            function(transaction, result) {
                if (result != null && result.rows != null)
                {
                    if (result.rows.length > 0) {
                        my_callback(false);
                    }
                    my_callback(false);
                }
                else
                {
                    my_callback(true);
                }
            }
            ...
        );
    }
    

    【讨论】:

      【解决方案2】:

      你的回调是问题所在。

      function AddValueToDB(sportName, location, dateTime, team, teamOpp) {
          function doActionOnResult(transaction, result){
              //Do your action here
              if (result != null && result.rows != null)
              {
                  if (result.rows.length > 0) {
                      return false;
                  }
                  return false;
              }
              else
              {
                  return true;
              }
          }
      
          lookMatchEvent(sportName, location, dateTime, team, teamOpp, doActionOnResult)
      }
      
      function lookMatchEvent($sportName, $location, $dateTime, $team, $teamOpp, callback) {
          db.transaction(function(transaction) {
              transaction.executeSql("SELECT * from sport where sportName='"+$sportName+"' and location='"+$location+"' and dateTime='"+$dateTime+"' and team='"+$team+"' and teamOpp='"+$teamOpp+"';",
              [],
              doActionOnResult,
              errorHandler);
          },errorHandler,nullHandler);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多