在成功回调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));
}
}
}
答案 0 :(得分:0)
如this answer中所述,本地存储调用是同步的,因此无需等待myStorage.put完成。
cannot read property promise of undefined
错误的原因是你没有从myStorage的put函数返回任何东西(但是,如上所述,你不需要返回一个promise,因为它是同步调用)。
您显示的updateTheArray
实现也是同步的,因此整个过程应该按顺序工作,不需要任何回调或承诺。