上次功能完成后运行一个功能

时间:2015-05-18 11:48:04

标签: angularjs

在成功回调ajax查询时,我必须

a) update the property of an object in an array (and I have to locate that object in the array)
b) save that array again in storage 
c) broadcast an event

我(尝试)通过这样做完成(下面的代码)

updateTheArray(myarray,'date', $scope.date);
myStorage.put(myarray);
$scope.$broadcast('alldone');

由于我担心这些事情发生故障或者可能发生故障,我希望能够在成功回调中做一些事情(伪代码)

 var updated = updateTheArray();  //update a property on an object in array
 updated.promise().then(function(){
     myStorage.put(array);  //saves
  }).done(function(){
     $scope.$broadcast('alldone'); //broadcast
 }

但是,我编写存储的方式和updateTheArray功能并没有设置为这样做。

在Angular中是否有办法确保下一个函数只在第一个函数完成后运行?

抛开updateTheArray函数,即使我尝试在这样的承诺中使用存储函数

   var save = myStorage.put(array);
    save.promise().done(function(){
       console.log('blah');
    });

我收到cannot read property promise of undefined错误,那么如何让该存储返回一个promise对象?

updateTheArray(在数组中查找特定对象并更改属性)

function updateTheArray(array, attr, value){
   var len = array.length;
   len = len -1;
   for (var i = len; i > 0; i --){
      if(array[i][attr] === value) { //find by date
         array[i]['completed'] = true; //set some property to true
      }
   }
}

存储

app.factory('myStorage', function(){
      return {

            get: function(){
                   return JSON.parse(localStorage.getItem(STORAGE_ID) || '[]');
             },
            put: function(myarray){
                   localStorage.setItem(STORAGE_ID, JSON.stringify(myarray));
             }

       }
}

1 个答案:

答案 0 :(得分:0)

this answer中所述,本地存储调用是同步的,因此无需等待myStorage.put完成。

cannot read property promise of undefined错误的原因是你没有从myStorage的put函数返回任何东西(但是,如上所述,你不需要返回一个promise,因为它是同步调用)。

您显示的updateTheArray实现也是同步的,因此整个过程应该按顺序工作,不需要任何回调或承诺。