Мы находимся в процессе принятия платформы Nx от Nrwl.io для наших приложений Angular.
В рамках этого мы пытаемся понять основные различия в реализации между методами optimisticUpdate и pessimisticUpdate в данныхмодуль персистентности.
Согласно документации, pessimisticUpdate обновит сервер перед клиентом, а с помощью optimisticUpdate сначала обновляется клиент.
Однако исходный код на github для обоих методов выглядит следующим образом
export function pessimisticUpdate<T, A extends Action>(
opts: PessimisticUpdateOpts<T, A>
) {
return (source: ActionStateStream<T, A>): Observable<Action> => {
return source.pipe(
mapActionAndState(),
concatMap(runWithErrorHandling(opts.run, opts.onError))
);
};
}
export function optimisticUpdate<T, A extends Action>(
opts: OptimisticUpdateOpts<T, A>
) {
return (source: ActionStateStream<T, A>): Observable<Action> => {
return source.pipe(
mapActionAndState(),
concatMap(runWithErrorHandling(opts.run, opts.undoAction))
);
};
}
На первый взгляд, разделение обновлений на оптимистические и пессимистичные представляется очень полезным, но, по сути, реализация обоих методов выглядит идентично, и мы пытаемся понять, что значит использовать оба метода..
Кроме того, пример кода для вызова метода optimisticUpdate не отправляет действие, если метод run успешно завершен.Насколько я понимаю, это закончило бы поток - нет никаких указаний на то, что должен возвращать внутренний вызов.
class TodoEffects {
@Effect() updateTodo = this.s.optimisticUpdate('UPDATE_TODO', {
// provides an action and the current state of the store
run: (a: UpdateTodo, state: TodosState) => {
return this.backend(state.user, a.payload);
},
undoAction: (a: UpdateTodo, e: any) => {
// dispatch an undo action to undo the changes in the client state
return ({
type: 'UNDO_UPDATE_TODO',
payload: a
});
}
});
Может ли кто-нибудь, кто использовал Nx, пролить свет на разницу, а также на то, чтонам нужно реализовать в нашем сервисе оптимистичное обновление.