angularjs承诺链接

时间:2015-04-13 21:27:18

标签: javascript jquery angularjs mongodb

这可能是也可能不是一个愚蠢的问题,或者我还没有完全理解angularjs承诺。但基本上我的前端有一些功能可以根据按钮点击向上和向下移动列表中的项目(称为组件),在这种情况下,我只会使用moveUp来演示我的问题。

$scope.moveUp = function(){ 
//do some work based off obj clicked

//call my put request to change order of components in my db
componentFactory.putData(data).then(

  componentFactory.getData().then(function(response){
   $scope.currentComponents = response.data;
  },
   function(error){
   console.error(error);
  }));
}

所以我的代码逻辑是我需要更新数据库中组件的顺序,然后调用get请求获取新的组件列表然后显示它们。

我遇到的问题是,每发几次点击,数据库列表都不会更新。这是因为我的第一个承诺直到我的获取请求之后才解决,所以它返回304未修改。

我的工厂看起来如下:

 app.factory('componentFactory',['$q',function($q){

 return{

 getComponents:function(){
        var deffered = $q.defer();
        httpPromise = $http.get('/components');

        httpPromise.then(function(response){
                deffered.resolve(response);
        },
        function(error) {
            console.error(error);
        });
            return deffered.promise;

      },


      putData: function(data){
           var deffered = $q.defer();
           httpPromise = $http.put('/components',data);

           httpPromise.then(function(response){
                deffered.resolve(response);
           },
            function(error) {
            console.error(error);
        });
            return deffered.promise;

      }

在服务器端,我的put请求只是将带有collection.update()的mongodb集合操作到带有顺序的字段,并根据它是否有效返回状态代码。

问题:

  1. 我是否正确使用了承诺?
  2. 为什么在某些情况下,在我的get请求之后,put数据的承诺无法解决?
  3. 我感谢任何帮助。谢谢!

0 个答案:

没有答案