无法返回所选数据angularjs

无法返回所选数据angularjs,angularjs,sqlite,factory,Angularjs,Sqlite,Factory,我创建了一个名为ProductStorage的服务,使用angularjs从sqlite数据库检索数据。它正确地选择数据,并在控制台中像ProductStorage.product(1)一样调用它时得到结果,但它总是返回{} .factory('ProductStorage', function() { return { product:function(product_id){ var product = {}; db.transaction(function

我创建了一个名为
ProductStorage
的服务,使用angularjs从sqlite数据库检索数据。它正确地选择数据,并在控制台中像
ProductStorage.product(1)
一样调用它时得到结果,但它总是返回
{}

.factory('ProductStorage', function() {
return {
   product:function(product_id){
      var product  = {};
      db.transaction(function (tx) {
            tx.executeSql("SELECT * FROM products WHERE product_id = "+product_id,[],function(tx, res){
              product = angular.fromJson(res.rows.item(0).productdata);   
              console.log(product);  // shows result in console   
            });
         });
      return product; // not returning product ,always return {}
   }
}
})

发生的情况是,您正在重新分配
产品
,这会中断对原始对象的引用

sqlite事务是异步的

因此,从服务返回的对象与您在
executeSql
回调中登录的对象不同

一种修复方法是扩展原始对象,而不是重新分配变量:

tx.executeSql(“…”,[],函数(tx,res){
var data=angular.fromJson(res.rows.item(0.productdata));
//不要破坏原始引用,只需更新对象属性即可
角度扩展(产品、数据);
});

另一种方法是使用
$q
创建从服务返回的承诺,并在
executeSql
回调中解析该承诺?您是否尝试过使用$q延迟对象+获取返回的承诺?