У меня есть список «задач», которые будут меняться во время и между сеансами пользователя и отображаются для пользователя в различных компонентах. Я хочу использовать «единый источник правды» и «хранить данные в потоке как можно дольше», наилучшую эвристику, не прибегая к использованию ngrx или подобного.
В частности, я хочу создайте 1) todos $ observable и 2) отдельные todo $ observables, которые передаются из $ todos, и 3) функцию getByTodoId, которая ищет todo локально, затем выполняет http-вызов, если он не найден. Я хочу быть очень осторожным в следующем -> http -> next l oop хотя.
Что у меня сейчас:
todoService
let todos: Array<todo>;
let todos$: ReplaySubject<Array<todo>>;
getTodoById(id): Observable<todo> => {
// looks in a todo array
let todo = todos.find(todo => todo.id === id)
if (todo) {
return of(todo);
}
return http.post(urlgetTodoById, {id}).pipe(
map((todo) => {
todos.push(todo)
todos$.next(todos)
return todo;
})
);
}
todoComponent
localTodo = await getByTodoId.toPromise()
Что я хочу:
todoService
let todo$; // maybe this should be like ReplaySubject<todo>?
getTodoById = (id) => todos$.pipe(
a) look id in todos$ and if not found
b) make api call for specific todo then add to todos$
)
todoComponent
localTodo$ = todoService.getByTodoId(id)