我想在AngularJs中模拟 async db操作。 (通过setTimeout
)。
我有这个工厂功能代码:(jsbin)
它使用内部array
:
shoppingModule.factory('Items', function() {
var items = {};
items.query = function() {
// In real apps, we'd pull this data from the server...
return [
{title: 'Paint pots', description: 'Pots full of paint', price: 3.95},
{title: 'Polka dots', description: 'Dots with polka', price: 2.95},
{title: 'Pebbles', description: 'Just little rocks', price: 6.95}
];
};
return items;
});
controller
依次调用:
function ShoppingController($scope, Items) {
$scope.items = Items.query();
}
但我希望通过setTimeout
操作模拟数据返回异步操作。 (简而言之 - 我想添加非阻塞延迟)
我尝试使用$timeout
变量但没有成功。还尝试使用setTimeout但没有成功(因为我没有在方法中使用$scope
对象。)
问题:
如何将setTimeout(模拟数据库操作3秒)添加到工厂函数中?
答案 0 :(得分:3)
您可以使用承诺实现此目的。修改您的代码以使用以下内容:
工厂:
var deferred = $q.defer();
$timeout(function () {
var returnObj = [
{title: 'Paint pots', description: 'Pots full of paint', price: 3.95},
{title: 'Polka dots', description: 'Dots with polka', price: 2.95},
{title: 'Pebbles', description: 'Just little rocks', price: 6.95}
];
deferred.resolve(returnObj);
}, 3000);
return deferred.promise;
然后从控制器中调用它:
$scope.items = Items.query().then(function(res){
alert(res);
// successfully resolved
}, function(err) {
// handle errors
});