define(['localassetmanager'], function (localAssetManager) { function syncNext(users, index, resolve, reject, apiClient, server) { var length = users.length; if (index >= length) { resolve(); return; } var onFinish = function () { syncNext(users, index + 1, resolve, reject, apiClient, server); }; syncUser(users[index], apiClient).then(onFinish, onFinish); } function syncUser(user, apiClient) { return apiClient.getOfflineUser(user.Id).then(function (result) { return localAssetManager.saveOfflineUser(result); }, function () { // TODO: We should only delete if there's a 401 response return localAssetManager.deleteOfflineUser(user.Id).catch(function () { return Promise.resolve(); }); }); } return function offlineUserSync() { var self = this; self.sync = function (apiClient, server) { return new Promise(function (resolve, reject) { var users = server.Users || []; syncNext(users, 0, resolve, reject, apiClient, server); }); }; }; });