我创建了一个名为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 {}
}
}
})
答案 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
回调中解析该承诺