Я использовал следующий сервис загрузчика в нескольких приложениях, который работает, как я ожидал.
Loader Service
private loader;
constructor(private loaderCtrl: LoadingController) {
this.loader = null;
}
async show(message?: string) {
if (this.loader !== null) {
this.loader.dismiss();
this.loader = null;
}
this.loader = await this.loaderCtrl.create({
spinner: 'crescent',
message: message ? message : 'Please wait...',
});
return this.loader.present();
}
hide() {
if (this.loader !== null) {
this.loader.dismiss();
this.loader = null;
}
}
А вот скрипт для вызова API -
Компонент TS
try {
await this.loaderSvc.show();
this.service1.getData().subscribe((res) => {
}, err => {
throw "Error calling API";
});
} catch (error) {
console.log(error);
} finally {
this.loaderSvc.hide();
}
Это все зависит от Вашего приложения. Действительно ли это - распределенное большое приложение, где старые приложения могут встретиться с новыми объектами данных от центральной базы данных или другого источника? (Во многом как более старые версии офисных приложений должен иметь некоторые способы иметь дело с более новыми форматами документов.)
Если так, пользовательская сериализация и десериализация с явной нумерацией версии схемы, сказал бы я. Я поместил явные метаданные по каждому элементу и атрибуту, заявив, должен ли читатель понять элемент/атрибут (и значения по умолчанию если не). Это может, конечно, занимать довольно много места и увеличить сложность кода...
Но ответ действительно зависит от того, почему Вы сериализируете к базе данных. Вы не интересуетесь использованием базы данных для ее реляционного capabiities? Иначе O/R отображающееся решение мог бы представлять интерес.
Имейте номер версии схемы в сериализованном объекте. Используя пользовательскую десериализацию, проверьте атрибут версии сначала, и если это оказывается старой версией, обновите его до последней схемы перед десериализацией.
Посмотрите здесь этот разговор о лучших практиках на WCF datacontract управление версиями, это немного более конкретно, чем, что Вы действительно хотите, но эти шаблоны решают ту же проблему как Ваш, можно использовать их в любой технологии, которую Вы хотите.
Не удаляйте/переименовывайте свойства. Только добавьте их.
Присвойте значения по умолчанию всем свойствам.
Это гарантирует, что xml сериализатор сможет десериализовать старый xml в новый объект, и что объект будет иметь "нормальные" значения.
Что говорит Alex Reitbort.
Можно также реализовать интерфейс ISerializable для обработки старого значения