无法返回选定的数据angularjs

时间:2015-09-19 13:19:45

标签: angularjs sqlite factory

我创建了一个名为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 {}
   }
}
})

1 个答案:

答案 0 :(得分:0)

正在发生的事情是您重新分配product并将引用分解为原始对象。

sqlite事务是异步

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

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

tx.executeSql("...", [], function (tx, res) {
    var data = angular.fromJson(res.rows.item(0).productdata);
    // don't break original reference, just update the object properties
    angular.extend(product, data);         
});

替代方法是使用$q创建从服务返回的承诺,并在executeSql回调中解析该承诺