複数の http リクエストを送信するサービス「UserData」があります。各リクエストの成功ハンドラーに対して、(コントローラー内の) 関数が呼び出されます。この関数は、ローカル ストレージ内のすべてを出力し (この例では 5 つのアイテムとします)、それらをすべて削除します。
私のJavaScriptの理解から、すべてが単一のスレッドで実行されます。つまり、複数のコールバックが同時に呼び出される可能性がありますが、それらは順番に (1 つずつ) 処理されます。最初のコールバックが localStorage をループしてすべてのアイテムを削除すると、すべてのアイテムが既に削除されている必要があるため、後続のすべてのコールバックが localStorage から何も出力しないことが期待されます。
しかし、この理論をテストすると、ローカル ストレージ内の 5 つのアイテムすべてがコールバックごとに出力されます。これは、角度のある質問よりも JavaScript の質問のほうが多いかもしれませんが、洞察をいただければ幸いです。
サービス:
app.factory('UserData', ['$http',
function($http) {
return {
save: function(data, apiEndpoint, scope) {
$http({method: 'PUT', url: apiEndpoint,
headers: {
'Content-Type': 'application/x-www-form-urlencoded' },
data: data}).
success(function(data, status, headers, config) {
scope.processFailedQueue();
}).
error(function(rdata, status, headers, config) {
});
}
};
}
]);
コントローラ:
function baseFunctionController($scope, $location, $route, $http, contentService, UserData) {
$scope.processFailedQueue = function() {
for (var i = 0; i < localStorage.length; i++){
console.log(localStorage.key(i));
}
for (var i = 0; i < localStorage.length; i++){
localStorage.removeItem(localStorage.key(i));
}
}
}