3

現在、Angular アプリケーションに Nrwl.io の Nx フレームワークを採用しています。

この一環として、データ永続化モジュールの 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 を使用している人なら誰でも、その違いと、楽観的な更新のためにサービスに実装する必要があることについて何か光を当てることができますか.

4

1 に答える 1