- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在为我们的 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 方法成功完成时分派(dispatch)操作。我的理解是这会结束流 - 没有迹象表明后端调用应该返回什么。
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 的人都可以阐明两者之间的区别以及我们需要在我们的服务中实现什么以实现乐观更新。
最佳答案
Nx 带有两个版本:RxJs pipeable operator
版本和 DataPersistence 类的一个成员。
前者需要一个 Observable 来进行管道传输,而您需要提供它(这些是您在第一个代码块中找到的函数)。后者看起来像您的第二个代码块。
乐观和悲观之间的区别仅在于能够回滚乐观更新(由 undoAction
提供)。这是因为在乐观调用中,我们会立即更新 UI 并发送网络调用来更新服务器。如果服务器调用不成功,我们需要回滚我们所做的 UI 更改。这不适用于悲观调用,因为我们有一个加载微调器或其他机制来避免在调用进行时更新 UI。
对于您的第二个代码块,run
函数未返回操作。这应该在 Nx 文档中更新。
class TodoEffects {
@Effect() updateTodo = this.s.optimisticUpdate('UPDATE_TODO', {
run: (a: UpdateTodo, state: TodosState) => {
return this.backend(state.user, a.payload)
.pipe(
map(resp => ({
type: 'UPDATE_TODO_SUCCESS',
payload: resp
}))
);
}
关于angular - 使用 Nrwl 的 Nx 中的数据持久化模块,悲观更新的实现与乐观更新有何不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53538265/
nx affected:lint --fix有什么区别和 nx format:write ? 不同的文章似乎确实提到代码应该格式化为 nx format:write命令,但它似乎并不完全依赖于 ESL
我正在尝试将一个新的 util 库添加到我的 Nx mono 存储库中。我用谷歌搜索并从 www.nx.dev 找到以下命令: nx generate @nrwl/nest:library util/
是否有一些关于 create-nx-workspace 所采用参数的文档?我想构建一个可以复制和粘贴的 oneliner 来设置新的工作区,而无需提出任何交互式问题。到目前为止我已经 npx crea
我有一个由 Nx CLI 生成的应用程序.我可以使用命令 nx test myApp 使用 Jest 运行此应用程序的测试.这工作正常。但是,我想使用 Jest 的 "watch mode" .在运行
我一直在研究 nrwl 扩展,它们看起来很棒。但是,当我按照他们的 Workspace Specific Schematics 教程进行操作时,最后一步没有显示要运行的命令。你能告诉我如何运行我创建的
NX 最强大的功能之一是能够查看哪些 Angular 应用程序受到最近更改的影响。 但是,为了使其发挥作用documentation告诉您需要: 提供两次提交的 SHA:npm run apps:af
我们想在库和我们的应用程序中使用 @emotion/react 中的 useTheme 我们正在使用:-react-native-web-nx 单体仓库- native react 这是我们的结构
所以我将 Angular 与 NX 一起使用,并且我有以下组 books 和 cars。对于这两个组,我想创建一个带有表格的 overview 库来查看书籍或汽车。 所以我在 libs/books/o
我有一个 Nx monorepo ( https://nx.dev )。 它有一个带有 Nx 缓存的文件夹 (./node_modules/.cache/nx/)。 它现在的大小超过 3GB。 是否有
您能否解释一下 NX 标志是什么以及它是如何工作的(请具有技术性)? 最佳答案 它在虚拟内存系统和 TLB(CPU 用于解析虚拟内存映射的结构)中标记一个内存页面不可执行。如果要从这样的页面执行任何程
我正在使用 nx.dev 构建和测试 Web 应用程序。workspace.json包含构建和测试应用程序的脚本,但是构建阶段仍然需要对一些文件进行预处理。 有什么方法可以添加预构建步骤(即指定外部
有人可以向我解释如何在硬件不提供的 32 位 x86 等平台上模拟 NX 位吗?我会很高兴解释它的模拟方式的基础知识,因为我根本无法想象它是如何实现的。提前致谢。 最佳答案 您可能想了解 Exec S
假设我有一个由这个矩阵定义的图: test = np.array([[0, 0, 4, 0], [0, 0, 6, 0], [4,
import networkx as nx G = nx.DiGraph() G.add_edge("A: test", 'B: test') nx.write_dot(G,'so.dot') 产生
想要从 nx 10 工作区移动到 12 而不离开角度 10。 nx migrate latest 但是升级也会默认升级 angular。 我搜索了 https://nx.dev/previous/an
我创建了一个带有一些边的图: import networkx as nx g = nx.Graph() g.add_edge(1, 2) g.add_edge(2, 6) g.add_edge(3,
因此考虑一个每条边都是双向的格子。现在我有一些代码可以删除一些边,以减少双向边的百分比并增加单向边的百分比: import networkx as nx import matplotlib.pyplo
在 Nrwl/Nx 工作区中似乎只有一个 package.json 文件。现在,如果我们有多个应用程序,每个应用程序都依赖于不同的包,那么我们必须将所有这些包包含在单个 package.json 文件
我有一个 Nrwl Nx 存储库,其中包含不同的应用程序(angular、nodejs 和 express)和内部共享库。 该存储库是使用 nx cli 创建的我想为生产制造其中之一 express应
我有一个自述文件,其中包含文件夹的文档、包含的库以及如何使用它们。 自述文件不是任何库的一部分,因此 nx-lint 会引发此错误: NX ERROR The following file(s
我是一名优秀的程序员,十分优秀!