function search(){
        var searchData = null;
        var query = "select * from table limit 1;";
        localDB.transaction(function(transaction) {
                transaction.executeSql(query, [], 
                 function(transaction, results) {
                            //我想在这里将results的值传给变量searchData,便于其他地方使用
                            searchData = results;  //但是这样没用
                            debug(searchData.rows.item(0)['info'], 1);    //这里有结果输出
                 }, function(
                                                transaction, error) {
                                        debug("Error: " + error.code + "<br>Message: " + error.message, 1);
                         });
        });
        debug(searchData.rows.item(0)['info'], 1);   //这里保错 Cannot read property 'rows' of null
        return searchData;  //其它地方处理需要searchData
}
请问怎么才能将records的值赋给searchData? 
谢谢

解决方案 »

  1.   

    1.将searchData提为全局变量 就可以保证作用域一致
    2.保证所有用到searchData的地址都是在回调执行完之后才去取值的
      

  2.   

    赋值是成功的,跟作用域也没有关系,没有把代码执行的先后次序搞清楚。
    既然是回调函数,那一般是异步执行的,不会阻塞主线程,所以代码会继续执行,先执行了debug(searchData.rows.item(0)['info'], 1); 这句,这时searchData没有赋值,然后某个时间回调条件满足了,执行回调函数,searchData被赋值function search(){
      var searchData = null;
      var query = "select * from table limit 1;";
      localDB.transaction(function(transaction) {
      transaction.executeSql(query, [],  
      function(transaction, results) {
      //我想在这里将results的值传给变量searchData,便于其他地方使用
      searchData = results; //但是这样没用
      debug(searchData.rows.item(0)['info'], 1); //这里有结果输出,都有输出还叫没用?  
    }, 
      function(
      transaction, error) {
      debug("Error: " + error.code + "<br>Message: " + error.message, 1);
      });
      });
      debug(searchData.rows.item(0)['info'], 1); //这里保错 Cannot read property 'rows', of null 这儿报错是因为上面那个函数还没有执行,serchData没有被赋值。
      return searchData; //其它地方处理需要searchData
    }修改如下:function search(){
      var searchData = null;
      var query = "select * from table limit 1;";
      localDB.transaction(function(transaction) {
      transaction.executeSql(query, [],  
      function(transaction, results) {
      //我想在这里将results的值传给变量searchData,便于其他地方使用
      searchData = results; //但是这样没用
      debug(searchData.rows.item(0)['info'], 1); //这里有结果输出
      return searchData; //在回调函数中searchData已经赋值  }, function(
      transaction, error) {
      debug("Error: " + error.code + "<br>Message: " + error.message, 1);
      return false;
      });
      });
    }
      

  3.   

    饿 自我纠正,return写错了,在在回调函数内return是不行的,不能作为search的返回值
    没有办法把这个回调函数中获取的值返回到主函数(因为回调函数执行时主函数已经结束)
    处理代码应该写在回调函数内,非要保存的话,用全局变量保存吧