异步 producers & createDraft / finishDraft
允许从 recipe 返回 Promise 对象。或者,换句话说,使用 async / await
。这对于长时间运行的进程非常有用,只有在 Promise 链解析后才生成新对象。请注意,如果 producer 是异步的,produce
本身(即使是柯里化形式)也会返回一个 promise。例子:
警告:请注意,draft 不应从异步程序中“泄露”并存储在其他地方。异步过程完成后,draft 仍将被释放
createDraft
and finishDraft
#
createDraft
和 finishDraft
是两个底层函数,它们对于在 immer 之上构建抽象的库非常有用。它避免了为了使用 draft 始终创建函数。相反,人们可以创建一个 draft,对其进行修改,并在未来的某个时间完成该 draft,在这种情况下,将产生下一个不可变状态。例如,我们可以将上面的示例重写为:
注意:finishDraft
以一个 patchListener
作为第二个参数,可以用来记录 patches,类似于 produce
警告:一般情况下,我们建议使用 producer
而不是 createDraft / finishDraft
组合,produce
在使用中不易出错,并且在代码中更清楚地区分了可变性和不变性的概念。