2015-09-19 22 views
0

我创建了一个名为ProductStorage的服务来从sqlite数据库中使用angularjs.s检索数据。它正确选择数据并在控制台中获得结果,当我称之为ProductStorage.product(1)时,但它总是返回{}无法返回选定的数据angularjs

.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 {} 
    } 
} 
}) 
+0

什么是'db'?你有没有试过使用$ q延期对象+获得返回的承诺? –

+0

@ThomasMenga sqlite – Shin

回答

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的诺言回调