У меня есть 2 варианта решения одной задачи. Скажите пожалуйста какой из способов правильнее и экономнее.
Способ 1:
В сервисе есть функция, которая создаёт запись в БД и возвращает её:
createQuestion_(question: Question): Promise<Question> {
return new Promise((resolve, reject) => {
this.httpClient.post('http://localhost:3000/questions', question)
.subscribe((resp) => {
resolve(resp);
});
});
}
в компоненте вызов её происходит так:
const question: Question = {
author: authorizedUser.id,
isDecided: false,
isDeleted: false,
tags: [],
title: this.form.value.title,
body: this.form.value.question,
ratingPlus: [],
ratingMinus: [],
createdDateUnix: '' + Date.now()
};
this.questionsService.createQuestion_(question).then((resp) => {
this.router.navigate(['/question/' + resp.id], {queryParams: {
questionCreateNow: true
}});
});
Способ 2:
Сервис:
createQuestion(question: Question): Observable<Question> {
return this.httpClient.post('http://localhost:3000/questions', question);
}
вызов из компонента:
this.questionsService.createQuestion(question).subscribe((resp) => {
this.router.navigate(['/question/' + resp.id], {queryParams: {
questionCreateNow: true
}});
});
Второй способ мне не нравится тем, что приходится для одноразовой операции использовать подписку на поток, которая будет действовать долгое время. Кроме того придётся писать код для отписки(unsubscribe()) при уничтожении компонента.
Первый способ логичнее потому что возвращает результат только один раз. Но минус его в том, что внутри промиса всё равно есть подписка на поток.