在angularJs中模拟db操作?

时间:2014-01-26 12:18:12

标签: javascript angularjs

我想在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秒)添加到工厂函数中?

1 个答案:

答案 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
});